Glu*_*luz 21 apache-spark pyspark
我有以下方式的数据集:
FieldA FieldB ArrayField
1 A {1,2,3}
2 B {3,5}
Run Code Online (Sandbox Code Playgroud)
我想爆炸ArrayField上的数据,因此输出将以下列方式显示:
FieldA FieldB ExplodedField
1 A 1
1 A 2
1 A 3
2 B 3
2 B 5
Run Code Online (Sandbox Code Playgroud)
我的意思是我想为ArrayField中的每个项生成一个输出行,同时保持其他字段的值.
你将如何在Spark中实现它.请注意,输入数据集非常大.
rog*_*one 38
该爆炸函数应该弄完.
pyspark版本:
>>> df = spark.createDataFrame([(1, "A", [1,2,3]), (2, "B", [3,5])],["col1", "col2", "col3"])
>>> from pyspark.sql.functions import explode
>>> df.withColumn("col3", explode(df.col3)).show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| A| 1|
| 1| A| 2|
| 1| A| 3|
| 2| B| 3|
| 2| B| 5|
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
Scala版本
scala> val df = Seq((1, "A", Seq(1,2,3)), (2, "B", Seq(3,5))).toDF("col1", "col2", "col3")
df: org.apache.spark.sql.DataFrame = [col1: int, col2: string ... 1 more field]
scala> df.withColumn("col3", explode($"col3")).show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| A| 1|
| 1| A| 2|
| 1| A| 3|
| 2| B| 3|
| 2| B| 5|
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37524 次 |
最近记录: |