您可以将带有索引值的 pyspark 列传递给 element_at 函数吗?
我有一个类似于以下内容的 df:
------------------
foo | bar
------------------
1 | [3, 2, 1]
2 | [3, 3, 1]
1 | [8, 2, 1]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 foo 作为索引来创建以下内容:
baz |
--------
3 |
3 |
8 |
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下内容但没有成功:
df.withColumn('baz', F.element_at('bar', F.col('foo'))
Run Code Online (Sandbox Code Playgroud)
此代码将为您提供所需的结果:
df.withColumn("baz", F.col("bar")[F.col("foo") - F.lit(1)]).show()
Run Code Online (Sandbox Code Playgroud)
+---+---------+---+
|foo| bar|baz|
+---+---------+---+
| 1|[3, 2, 1]| 3|
| 2|[3, 3, 1]| 3|
| 1|[8, 2, 1]| 8|
+---+---------+---+
Run Code Online (Sandbox Code Playgroud)
我不得不从中减去一个,foo因为看起来您正在使用 1-indexing。PySpark 数组是零索引的。
这是更标准的解决方案。
+---+---------+---+
|foo| bar|baz|
+---+---------+---+
| 1|[3, 2, 1]| 3|
| 2|[3, 3, 1]| 3|
| 1|[8, 2, 1]| 8|
+---+---------+---+
Run Code Online (Sandbox Code Playgroud)
+---+---------+---+
|foo| bar|baz|
+---+---------+---+
| 1|[3, 2, 1]| 2|
| 2|[3, 3, 1]| 1|
| 1|[8, 2, 1]| 2|
+---+---------+---+
Run Code Online (Sandbox Code Playgroud)
这是制作示例数据的代码:
df.withColumn("baz", F.col("bar")[F.col("foo")]).show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |