在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
,所以如果你想要别的东西,你应该调整它。