加入 Spark Databricks 上的数据爆炸
Posted
技术标签:
【中文标题】加入 Spark Databricks 上的数据爆炸【英文标题】:Join Data Explode on Spark Databricks 【发布时间】:2020-08-21 18:28:09 【问题描述】:我有类似的数据
FieldA FieldB ExplodedField
1 A 1
1 A 2
1 A 3
2 B 3
2 B 5
我想加入数据,因此输出将如下所示:
FieldA FieldB ExplodedField
1 A 1
1 A 1,2
1 A 1,2,3
2 B 3
2 B 3,5
您将如何在 Spark 中实现它。请注意,输入数据集非常大
【问题讨论】:
【参考方案1】:尝试使用带有 collect_list and concat_ws
功能的窗口 partitionBy + orderBy
。
Example:
val df=Seq((1,"A",1),(1,"A",2),(1,"A",3)).toDF("FieldA","FieldB","ExplodedField").withColumn("mid",monotonically)
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
val win=Window.partitionBy("FieldA","FieldB").orderBy("mid")
df.withColumn("ExplodedField",concat_ws(",",collect_list(col("ExplodedField")).over(win))).
drop("mid").
show()
/*
+------+------+-------------+
|FieldA|FieldB|ExplodedField|
+------+------+-------------+
| 1| A| 1|
| 1| A| 1,2|
| 1| A| 1,2,3|
+------+------+-------------+
*/
【讨论】:
以上是关于加入 Spark Databricks 上的数据爆炸的主要内容,如果未能解决你的问题,请参考以下文章
获取 TypeError:在 Apache Spark / Databricks 中尝试流数据时,路径只能是单个字符串
如何在 Spark Databricks 中注册 SQL 函数
Databricks 上的 PySpark 在绝对 URI 中获取相对路径:尝试使用 DateStamps 读取 Json 文件时