如何从Spark 2中的DataFrame列中提取子元素?

时间:2018-01-27 21:40:06

标签: scala apache-spark dataframe

给出像这样的DataFrame:

df_products =

+----------+--------------------+
|product_PK|            products|
+----------+--------------------+
|       111|[[222,66],[333,55...|
|       222|[[333,24],[444,77...|
...
+----------+--------------------+

如何将其转换为以下DataFrame:

df_products =

+----------+--------------------+------+
|product_PK|      rec_product_PK|  rank|
+----------+--------------------+------+
|       111|                 222|    66|
|       111|                 333|    55|
|       222|                 333|    24|
|       222|                 444|    77|
...
+----------+--------------------+------+

1 个答案:

答案 0 :(得分:1)

这里基本上有两个步骤:首先是爆炸数组(使用爆炸函数)为数组中的每个值获取一行,然后修复每个元素。

你没有这里的模式,所以数组中每个元素的内部结构都不清楚,但是,我认为它就像一个带有两个元素的结构。

这意味着你会做这样的事情:

import org.apache.spark.sql.functions.explode
df1 = df.withColumn("array_elem", explode(df("products"))
df2 = df1.select("product_PK", "array_elem.*")

现在您所要做的就是将列重命名为您需要的名称。