我刚开始使用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()或显示它。
答案 0 :(得分:17)
你不能:
flatMap
,因为它会展平Row
您无法使用append
,因为:
tuple
或Row
没有附加方法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
,因此如果您还需要其他内容,则应进行调整。