python - Pyspark 爆炸列表创建列表中带有索引的列

标签 python apache-spark pyspark

所以我有一个关于 pyspark 的问题。我有一个如下所示的数据框:

+---+------------+
| id|        list|
+---+------------+
|  2|[3, 5, 4, 2]|
+---+------------+
|  3|[4, 5, 3, 2]|
+---+------------+

我想将其分解为多行,并在单独的列中保留有关列表中每个元素的位置的信息。结果应该如下所示:

+---+------------+------------+
| id|    listitem|        rank|
+---+------------+------------+
|  2|           3|           1|
+---+------------+------------+
|  2|           5|           2|
+---+------------+------------+
|  2|           4|           3|
+---+------------+------------+
|  2|           2|           4|
+---+------------+------------+
|  3|           4|           1|
+---+------------+------------+
|  3|           5|           2|
+---+------------+------------+
|  3|           3|           3|
+---+------------+------------+
|  3|           2|           4|
+---+------------+------------+

排名列具有每个元素在列表中的位置的索引+1。关于实现它的最佳代码有什么建议吗?

最佳答案

您可以使用posexplode()posexplode_outer()函数以获得所需的结果。

df = spark.createDataFrame([(2, [3, 5, 4, 2]), (3, [4, 5, 3, 2])], ["id", "list"])

df.select('id',posexplode_outer('list').alias('rank', 'listitem')) \
.withColumn('rank', col('rank') + 1).show()

+---+----+--------+
| id|rank|listitem|
+---+----+--------+
|  2|   1|       3|
|  2|   2|       5|
|  2|   3|       4|
|  2|   4|       2|
|  3|   1|       4|
|  3|   2|       5|
|  3|   3|       3|
|  3|   4|       2|
+---+----+--------+

关于python - Pyspark 爆炸列表创建列表中带有索引的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69162207/

相关文章:

python - 使用 Python 和 PySpark 提取 URL 参数

apache-spark - 如何向通过 Spark 创建的 View 添加注释

python - 中断和取消正在进行的函数调用的最佳(pythonic)方法?

python - 有没有办法使对象可下标?

Python随机选择 'percentage'

python - 如何获得今天 - PySpark(SQL) 中的 “6 months” 日期

scala - 如何在对RDD中找到最大值?

python - 使用 python/pandas 为 A 列中的每个唯一记录获取 B 列中的唯一值

node.js - 从 Node.js 服务器查询 Spark SQL

python - PySpark 窗口函数 - 用以前的非零值填充数据