Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧上应用映射函数_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 在数据帧上应用映射函数

Python 在数据帧上应用映射函数,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我刚刚开始使用databricks/pyspark。我正在使用python/spark 2.1。我已将数据上载到表中。此表是一列字符串。我希望对列中的每个元素应用一个映射函数。我将表加载到数据帧中: df = spark.table("mynewtable") 我能看到的唯一方法是其他人说,将其转换为RDD以应用映射函数,然后返回到dataframe以显示数据。但这会导致作业中止阶段失败: df2 = df.select("_c0").rdd.flatMap(lambda x: x.appen

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

df = spark.table("mynewtable")
我能看到的唯一方法是其他人说,将其转换为RDD以应用映射函数,然后返回到dataframe以显示数据。但这会导致作业中止阶段失败:

df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()
我只想对表中的数据应用任何类型的映射函数。 例如,向列中的每个字符串添加一些内容,或者对字符执行拆分,然后将其放回数据帧中,这样我就可以.show()或显示它

您不能:

  • 使用
    flatMap
    ,因为它将展平
  • 无法使用
    追加
    ,因为:

    • 元组
      没有附加方法
    • 针对副作用执行
      append
      (如果集合中存在),并返回
      None
我会在列中使用

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
,因此如果您需要其他内容,您应该调整它。

我有一个后续问题@Alper t。Turker在pyspark udf或rdd处理中哪个性能最好?