在DataFrame上应用映射函数

时间:2017-07-30 20:57:48

标签: python apache-spark pyspark databricks

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

df = spark.table("mynewtable")

我能看到的唯一方法就是将其转换为RDD以应用映射功能,然后返回数据帧以显示数据。但这会导致工作中止阶段失败:

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

我想要做的只是将任何类型的地图功能应用于表格中的数据。 例如,在列中为每个字符串添加一些内容,或者对char执行拆分,然后将其放回到数据框中,以便我可以.show()或显示它。

1 个答案:

答案 0 :(得分:17)

你不能:

  • 使用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,因此如果您还需要其他内容,则应进行调整。