在 DataFrame 上应用映射函数
Posted
技术标签:
【中文标题】在 DataFrame 上应用映射函数【英文标题】:Applying Mapping Function on DataFrame 【发布时间】:2017-07-30 20:57:47 【问题描述】:我刚刚开始使用 databricks/pyspark。我正在使用 python/spark 2.1。我已将数据上传到表中。该表是一个包含字符串的单列。我希望将映射函数应用于列中的每个元素。我将表格加载到数据框中:
df = spark.table("mynewtable")
我能看到的唯一方法是其他人说是将其转换为 RDD 以应用映射函数,然后返回数据框以显示数据。但这会引发工作中止阶段失败:
df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()
我想要做的只是将任何类型的映射函数应用到表中的数据。 例如,将某些内容附加到列中的每个字符串,或对字符执行拆分,然后将其放回数据框中,以便我可以 .show() 或显示它。
【问题讨论】:
【参考方案1】:你不能:
使用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
,所以如果你想要别的,你应该调整它。
【讨论】:
我有一个后续问题***.com/questions/62295160/…@Alper t。特克 在 pyspark udf 或 rdd 处理中哪一个性能最好?以上是关于在 DataFrame 上应用映射函数的主要内容,如果未能解决你的问题,请参考以下文章