我刚开始使用 databricks/pyspark。我正在使用 python/spark 2.1。我已将数据上传到表中。该表是一个充满字符串的列。我希望对列中的每个元素应用一个映射函数。我将表加载到数据框中:
df = spark.table("mynewtable")
我能看到的唯一方法是其他人说的是将其转换为 RDD 以应用映射函数,然后返回到数据帧以显示数据。但这会引发作业中止阶段失败:
df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()
我只想对表中的数据应用任何类型的 map 函数。 例如,向列中的每个字符串附加一些内容,或对字符执行拆分,然后将其放回数据框中,以便我可以 .show() 或显示它。
最佳答案
你不能:
- 使用
flatMap
因为它会压扁Row
您不能使用
append
因为:tuple
或Row
没有附加方法append
(如果存在于集合中)针对副作用执行并返回None
我会使用 withColumn
:
df.withColumn("foo", lit("anything"))
但是 map
应该也能工作:
df.select("_c0").rdd.flatMap(lambda x: x + ("anything", )).toDF()
编辑(给出评论):
你可能想要一个udf
from pyspark.sql.functions import udf
def iplookup(s):
return ... # Some lookup logic
iplookup_udf = udf(iplookup)
df.withColumn("foo", iplookup_udf("c0"))
默认的返回类型是StringType
,所以如果你想要别的东西,你应该调整它。
关于python - 在 DataFrame 上应用映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45404644/