python - Pandas UDF 中 lambda 函数的 PySpark 等效项
问题描述
我在 PySpark 的 Pandas UDF 中编写了数据预处理代码。我正在使用 lambda 函数从列的所有记录中提取部分文本。
这是我的代码的样子:
@pandas_udf("string", PandasUDFType.SCALAR)
def get_X(col):
return col.apply(lambda x: x.split(',')[-1] if len(x.split(',')) > 0 else x)
df = df.withColumn('X', get_first_name(df.Y))
这工作正常并给出了预期的结果。但我需要在 Spark 等效代码中编写相同的逻辑。有没有办法做到这一点?谢谢。
解决方案
我认为一个函数substring_index足以完成这个特定任务:
from pyspark.sql.functions import substring_index
df = spark.createDataFrame([(x,) for x in ['f,l', 'g', 'a,b,cd']], ['c1'])
df2.withColumn('c2', substring_index('c1', ',', -1)).show()
+------+---+
| c1| c2|
+------+---+
| f,l| l|
| g| g|
|a,b,cd| cd|
+------+---+
推荐阅读
- node.js - 用电子打包器打包应用后找不到文件
- html - 您如何处理两个元素具有相同可访问名称但功能不同的情况?
- r - 不知道为什么我会收到此错误:“model.frame.default 中的错误......可变长度不同”?
- tensorflow - 在图像预处理方面,我在将 Tensorflow Python 转换为 Tensorflow.js 时遇到了麻烦。我错过了什么?
- java - Pdfbox Java docusign 签名消失
- java - 在线程完成其工作或在 android 中返回一个值后,在 MainActivity 中运行一行
- regex - 仅用于文件上传图像的正则表达式 - opencart
- reactjs - 为什么 `npm test` 只进行一项测试就需要这么长时间?
- firebase - 两个读取规则和第二个规则进行字段检查
- javascript - 动态插入的选择下拉字段无法正常工作