关于python:在DataFrame上应用映射功能

Applying Mapping Function on DataFrame

我刚刚开始使用databricks / pyspark。 我正在使用python / spark 2.1。 我已将数据上传到表格。 该表是充满字符串的单列。 我希望将映射函数应用于列中的每个元素。 我将表加载到数据帧中:

1
df = spark.table("mynewtable")

我能看到的唯一方法是其他人说的是将其转换为RDD以应用映射功能,然后再返回到数据框以显示数据。 但这会引发作业中止阶段失败:

1
df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()

我要做的就是将任何类型的map函数应用于表中的数据。
例如,在列中的每个字符串后面附加一些内容,或对char进行拆分,然后将其放回数据帧中,以便我可以显示.show()或显示它。


你不能:

  • 使用flatMap,因为它将使Row变平
  • 您不能使用append,因为:

    • tupleRow没有添加方法
    • 为副作用执行append(如果存在于集合中)并返回None

我会使用withColumn

1
df.withColumn("foo", lit("anything"))

但是map应该也可以工作:

1
df.select("_c0").rdd.flatMap(lambda x: x + ("anything", )).toDF()

编辑(给出评论):

您可能需要udf

1
2
3
4
5
6
7
8
from pyspark.sql.functions import udf

def iplookup(s):
    return ... # Some lookup logic

iplookup_udf = udf(iplookup)

df.withColumn("foo", iplookup_udf("c0"))

默认返回类型为StringType,因此,如果您需要其他内容,则应进行调整。