在DataFrame上应用映射功能

问题描述:

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

df = spark.table("mynewtable") 

我能看到的唯一途径是别人说的话是将其转换为RDD应用映射函数,然后返回到数据框来显示数据。但是,这牵扯出工作中止阶段失败:

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

所有我想要做的就是申请任何种类的地图功能,以我的表中的数据。 例如对列中的每个字符串追加一些东西,或者在字符上执行拆分,然后将其放回到数据框中,以便我可以.show()或显示它。

您不能:

  • 使用flatMap因为它会压扁
  • 不能使用append因为:

    • tuple或没有append方法
    • append(如果出现在集合上)是为e方执行的ffects并返回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,所以如果你想要别的东西,你应该调整它。