Apache spark 如何将函数应用于数据帧列?

Apache spark 如何将函数应用于数据帧列?,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我有下面的火花。它工作得很好。我只是想知道如何在Spark数据帧上以同样的方式运行函数。我知道我可以使用Lambda实现以下功能,我只是想看看是否可以运行更大的功能(以及如何运行) 所以,如果我在一个数据帧中有相同的数据,并且我想调用一个自定义函数来对一个特定字段执行一个操作,我该怎么做呢 df = my_spark.read.format("csv").option("header", "false").load(r"c:\Users\kiera\Downloads\fakefriends.c

我有下面的火花。它工作得很好。我只是想知道如何在Spark数据帧上以同样的方式运行函数。我知道我可以使用Lambda实现以下功能,我只是想看看是否可以运行更大的功能(以及如何运行)

所以,如果我在一个数据帧中有相同的数据,并且我想调用一个自定义函数来对一个特定字段执行一个操作,我该怎么做呢

df = my_spark.read.format("csv").option("header", "false").load(r"c:\Users\kiera\Downloads\fakefriends.csv")

#Rename columns to make them easier to work with
df = df.withColumnRenamed('_c0', 'UserID')\
        .withColumnRenamed('_c1', 'Name')\
        .withColumnRenamed('_c2', 'Age')\
        .withColumnRenamed('_c3', 'Friends')

printline
是一个Python函数

RDDAPI是Spark开发人员的低级API,这就是为什么使用RDDAPI的Spark应用程序通常更容易推理的原因。那是火花核

DataFrame API是Spark开发人员的高级API,他们从SQL(数据工程师?)的角度思考,这就是Spark SQL(构建在Spark Core之上)

问题是如何丰富Spark SQL中可用的标准函数,使之与RDDAPI非常相似。这是用户定义的函数(UDF)


下面是将
printline
函数应用于
rdd2
中的每一行(记录)(这将尽可能接近Python的pandas和Scala的Collection API)

等效方法是使用用户定义的函数和
DataFrame.withColumn
运算符。他们是一样的

伪代码如下所示:

df3 = df2.withColumn("nameOfTheColumn", printlineUDF(comma-separated column names))
df3.take(5)
请注意,您在DataFrame API中使用
s,而在RDD API中,对象属于您的类型

rdd3= rdd2.map(printline)
rdd3.take(5)
df3 = df2.withColumn("nameOfTheColumn", printlineUDF(comma-separated column names))
df3.take(5)