我的数据帧有两个数组列.我想从第一列中提取索引在第二列中的元素.例如,我有以下数据集

df = spark.createDataFrame(
   [
      {
         'text': ['0', '1', '2', '3', '4', '5']
         'indices': [0, 2, 4],
      },
   ]
)

所以我希望列的值为"0","2","4].

有没有可能在不写UDF的情况下实现这一点?

推荐答案

您可以try 将expr函数与TRANSFORMelement_at一起使用,以根据第二个数组中提供的索引从第一个数组中 Select 元素.

例如:

from pyspark.sql import SparkSession
from pyspark.sql.functions import expr

df = df.withColumn(
    "selected_text",
    expr("TRANSFORM(indices, i -> element_at(text, i))")
)
df.show()

Python相关问答推荐

比较两个数据帧并并排附加结果(获取性能警告)

难以在Manim中正确定位对象

如何根据参数推断对象的返回类型?

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

更改键盘按钮进入'

Julia CSV for Python中的等效性Pandas index_col参数

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

如何根据一列的值有条件地 Select 前N组?

未知依赖项pin—1阻止conda安装""

使用Python从URL下载Excel文件

如何使用使用来自其他列的值的公式更新一个rabrame列?

将链中的矩阵乘法应用于多组值

从一个df列提取单词,分配给另一个列

在电影中向西北方向对齐""

Python将一个列值分割成多个列,并保持其余列相同

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

无法使用请求模块从网页上抓取一些产品的名称

为什么在更新Pandas 2.x中的列时,数据类型不会更改,而在Pandas 1.x中会更改?