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 ,因为:-
tuple 或Row 没有添加方法 -
为副作用执行
append (如果存在于集合中)并返回None
-
我会使用
1 | df.withColumn("foo", lit("anything")) |
但是
1 | df.select("_c0").rdd.flatMap(lambda x: x + ("anything", )).toDF() |
编辑(给出评论):
您可能需要
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")) |
默认返回类型为