相关疑难解决方法(0)

Pyspark:将多个数组列拆分为行

我有一个数据框,有一行和几列.一些列是单个值,其他列是列表.所有列表列的长度都相同.我想将每个列表列拆分为一个单独的行,同时保持任何非列表列不变.

样本DF:

from pyspark import Row
from pyspark.sql import SQLContext
from pyspark.sql.functions import explode

sqlc = SQLContext(sc)

df = sqlc.createDataFrame([Row(a=1, b=[1,2,3],c=[7,8,9], d='foo')])
# +---+---------+---------+---+
# |  a|        b|        c|  d|
# +---+---------+---------+---+
# |  1|[1, 2, 3]|[7, 8, 9]|foo|
# +---+---------+---------+---+
Run Code Online (Sandbox Code Playgroud)

我想要的是:

+---+---+----+------+
|  a|  b|  c |    d |
+---+---+----+------+
|  1|  1|  7 |  foo |
|  1|  2|  8 |  foo |
|  1|  3|  9 |  foo |
+---+---+----+------+
Run Code Online (Sandbox Code Playgroud)

如果我只有一个列表列,只需执行以下操作即可explode:

df_exploded = df.withColumn('b', explode('b')) …
Run Code Online (Sandbox Code Playgroud)

python dataframe apache-spark apache-spark-sql pyspark

50
推荐指数
3
解决办法
3万
查看次数

将数组数据分解为spark中的行

我有以下方式的数据集:

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中实现它.请注意,输入数据集非常大.

apache-spark pyspark

21
推荐指数
1
解决办法
4万
查看次数