加入 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 函数

在 Spark DataBricks 上创建表模式

Spark 上的 Pandas 命令出错?

Databricks 上的 PySpark 在绝对 URI 中获取相对路径:尝试使用 DateStamps 读取 Json 文件时

Databricks 是不是为给定的集群和数据集提供推荐的 spark 参数?