gpt4 book ai didi

scala - 在 Scala/Spark 中合并两个表

转载 作者:行者123 更新时间:2023-12-05 03:12:58 27 4
gpt4 key购买 nike

我有两个制表符分隔的数据文件,如下所示:

文件 1:

number  type    data_present
1 a yes
2 b no

文件 2:

type    group   number  recorded
d aa 10 true
c cc 20 false

我想合并这两个文件,使输出文件如下所示:

number  type    data_present    group   recorded
1 a yes NULL NULL
2 b no NULL NULL
10 d NULL aa true
20 cc NULL cc false

如您所见,对于其他文件中不存在的列,我用 NULL 填充这些地方。

关于如何在 Scala/Spark 中执行此操作的任何想法?

最佳答案

为您的数据集创建两个文件:

$ cat file1.csv 
number type data_present
1 a yes
2 b no

$ cat file2.csv
type group number recorded
d aa 10 true
c cc 20 false

将它们转换为 CSV:

$ sed -e 's/^[ \t]*//' file1.csv | tr -s ' ' | tr ' ' ',' > f1.csv
$ sed -e 's/^[ ]*//' file2.csv | tr -s ' ' | tr ' ' ',' > f2.csv

使用spark-csv将 CSV 文件加载为数据帧的模块:

$ spark-shell --packages com.databricks:spark-csv_2.10:1.1.0

import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val df1 = sqlContext.load("com.databricks.spark.csv", Map("path" -> "f1.csv", "header" -> "true"))
val df2 = sqlContext.load("com.databricks.spark.csv", Map("path" -> "f2.csv", "header" -> "true"))

现在执行连接:

scala> df1.join(df2, df1("number") <=> df2("number") && df1("type") <=> df2("type"), "outer").show()

+------+----+------------+----+-----+------+--------+
|number|type|data_present|type|group|number|recorded|
+------+----+------------+----+-----+------+--------+
| 1| a| yes|null| null| null| null|
| 2| b| no|null| null| null| null|
| null|null| null| d| aa| 10| true|
| null|null| null| c| cc| 20| false|
+------+----+------------+----+-----+------+--------+

有关更多详细信息,请转到 here , herehere .

关于scala - 在 Scala/Spark 中合并两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com