簡體   English   中英

如何將 function 應用於 DataFrame 列?

[英]How to apply a function to a DataFrame column?

我在 Spark 中有以下內容。 效果很好。 我只是想知道如何在 Spark dataframe 上以相同的方式運行函數。 我知道我可以在下面使用 Lambda,我只是想看看我是否可以運行更大的功能(以及如何)

def printline(x):
    return x*2

#The map function creates a new RDD with 1 to 1 mapping from the old
rdd3= rdd2.map(printline)
rdd3.take(5)

因此,如果我在 dataframe 中具有相同的功能,並且我想調用自定義 function 來對特定字段執行操作,我該怎么做?

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 function。

RDD API 是用於 Spark 開發人員的低級 API,這就是為什么使用 RDD API 的 Spark 應用程序通常更容易推理的原因。 那是火花核心。

DataFrame API is a high-level API for Spark developers who think in terms of SQL (data engineers?) That's Spark SQL (that is built atop Spark Core).

問題是如何豐富 Spark SQL 中可用的標准函數,用於與 RDD API 非常相似的東西。 那是用戶定義的函數(UDF)。


以下是表示將printline function 應用於rdd2中的每一行(記錄)(盡可能接近 Python 的 pandas 和 Scala 的 Collection ZDB974238714CA8DE634A7CE1DZ08A)

rdd3= rdd2.map(printline)
rdd3.take(5)

等效的是使用用戶定義的 function 和DataFrame.withColumn運算符。 他們是一樣的。

偽代碼如下所示:

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

請注意,您在 DataFrame API 中使用Row ,而在 RDD 中 API 對象屬於您的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM