给出像这样的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|
...
+----------+--------------------+------+
答案 0 :(得分:1)
这里基本上有两个步骤:首先是爆炸数组(使用爆炸函数)为数组中的每个值获取一行,然后修复每个元素。
你没有这里的模式,所以数组中每个元素的内部结构都不清楚,但是,我认为它就像一个带有两个元素的结构。
这意味着你会做这样的事情:
import org.apache.spark.sql.functions.explode
df1 = df.withColumn("array_elem", explode(df("products"))
df2 = df1.select("product_PK", "array_elem.*")
现在您所要做的就是将列重命名为您需要的名称。