कैसे आबाद करने के लिए नक्शा[स्ट्रिंग,Dataframe] के रूप में एक कॉलम में एक Dataframe स्काला में

0

सवाल

मैं एक Map[String, Dataframe]. मैं गठबंधन करना चाहते हैं, सभी डेटा के अंदर है कि नक्शे में एक ही Dataframe. कर सकते हैं एक dataframe एक स्तंभ के नक्शा डेटा प्रकार?

def sample(dfs : Map[String,Dataframe]): Dataframe =
{
.........
}

उदाहरण:

DF1

id name age
1  aaa  23
2  bbb  34

DF2

game  time  score
ludo  10    20
rummy 30    40 

मैं पास ऊपर दो DFs नक्शे के रूप में कार्य करने के लिए. फिर डेटा के प्रत्येक dataframes में एक एकल स्तंभ के उत्पादन dataframe के रूप में json प्रारूप में है.

बाहर DF

+---------------------------------------------------------------------------------------+
| column1                                                                              |
+---------------------------------------------------------------------------------------+
| [{"id":"1","name":"aaa","age":"23"},{"id":21","name":"bbb","age":"24"}]               |
| [{"game":"ludo","time":"10","score":"20"},{"game":"rummy","time":"30","score":"40"}]  |
+---------------------------------------------------------------------------------------+
apache-spark dataframe dictionary scala
2021-11-23 13:42:20
2

सबसे अच्छा जवाब

1

आप पूछ रहे हैं उत्पन्न करने के लिए एक पंक्ति प्रति dataframe. सावधान रहो, अगर एक dataframes पर्याप्त इतनी बड़ी है कि यह निहित नहीं किया जा सकता है, जहां एक प्रबंधक, इस कोड को तोड़ देंगे ।

की पहली उत्पन्न डेटा और नक्शे dfs के प्रकार Map[String, DataFrame].

val df1 = Seq((1, "aaa", 23), (2, "bbb", 34)).toDF("id", "name", "age")
val df2 = Seq(("ludo", 10, 20), ("rummy", 10, 40)).toDF("game", "time", "score")
dfs = Seq(df1, df2)

तो, प्रत्येक के लिए dataframe का नक्शा, हम उत्पन्न दो कॉलम है. big_map सहयोगियों के प्रत्येक स्तंभ के नाम dataframe करने के लिए अपने मूल्य (कास्ट में स्ट्रिंग के लिए एक सुसंगत प्रकार). df बस का नाम शामिल है dataframe. हम तो यूनियन के सभी dataframes के साथ reduce और समूह द्वारा name (यह हिस्सा है जहां हर एक dataframe समाप्त होता है पूरी तरह से एक पंक्ति में है, और इसलिए एक एक प्रबंधक).

dfs
    .toSeq
    .map{ case (name, df) => df
        .select(map(
             df.columns.flatMap(c => Seq(lit(c), col(c).cast("string"))) : _*
        ) as "big_map")
        .withColumn("df", lit(name))}
    .reduce(_ union _)
    .groupBy("df")
    .agg(collect_list('big_map) as "column1")
    .show(false)
+---+-----------------------------------------------------------------------------------+
|df |column1                                                                            |
+---+-----------------------------------------------------------------------------------+
|df0|[{id -> 1, name -> aaa, age -> 23}, {id -> 2, name -> bbb, age -> 34}]             |
|df1|[{game -> ludo, time -> 10, score -> 20}, {game -> rummy, time -> 10, score -> 40}]|
+---+-----------------------------------------------------------------------------------+
2021-11-24 07:05:52
0

यहाँ एक समाधान है विशिष्ट उपयोग के मामले:

import org.apache.spark.sql._

def sample(dfs : Map[String, DataFrame])(implicit spark: SparkSession): DataFrame =
  dfs
    .values
    .foldLeft(spark.emptyDataFrame)((acc, df) => acc.union(df))

स्पार्क सत्र बनाने के लिए आवश्यक है खाली DataFrame संचायक पर गुना करने के लिए.

वैकल्पिक रूप से अगर आप की गारंटी कर सकते हैं Map है गैर खाली है.

def sample(dfs : Map[String, DataFrame]): DataFrame =
  dfs
    .values
    .reduce((acc, df) => acc.union(df))
2021-11-23 14:30:01

आप कर सकते हैं कृपया जाँच मेरा प्रश्न ये है जोड़ा गया एक उदाहरण है अब.प्रत्येक इनपुट dataframe जो मुझे मिल गया है डिफ स्कीमा तो मैं करना चाहते हैं डेटा के एक पूरे इनपुट dataframe पॉपुलेटेड हो करने के लिए एक स्तंभ के रूप में ,तो मेरे उत्पादन dataframe है डेटा के प्रत्येक इनपुट dataframe में एक स्तंभ
minnu

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में