在 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,因为:

tupleRow 没有附加方法 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 上应用映射函数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas DataFrame 函数应用和映射

在 Julia 中加入 DataFrame

向 Pandas DataFrame 箱线图添加图例

Pandas 从应用函数返回 DataFrame?

Spark Dataframe 映射函数

Spark SQL仅映射一列DataFrame