Как применить функцию к столбцу DataFrame? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть ниже в Spark. это прекрасно работаетМне просто интересно, как я буду выполнять функции таким же образом на кадре данных Spark. Я знаю, что могу использовать лямбду для нижеприведенного, я просто хотел посмотреть, смогу ли я запускать более крупные функции (и как)функция для выполнения операции над конкретным полем, как бы я это сделал?

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')

1 Ответ

2 голосов
/ 22 октября 2019

printline - это функция Python.

RDD API - это низкоуровневый API для разработчиков Spark, и поэтому часто проще рассуждать о приложении Spark, которое использует RDD API. Это Spark Core.

DataFrame API - это высокоуровневый API для разработчиков Spark, которые думают с точки зрения SQL (инженеры данных?) Это Spark SQL (который построен поверх Spark Core).

Вопрос в том, как обогатить стандартные функции, доступные в Spark SQL, чем-то, очень похожим на RDD API. Это пользовательские функции (UDF).


Ниже приведено выражение применения функции printline к каждой строке (записи) в rdd2 (это должно быть как можно ближе). к пандам Python и Scala's Collection API, насколько это возможно).

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

Эквивалентом является использование пользовательской функции и оператора DataFrame.withColumn. Они одинаковы.

Псевдокод будет выглядеть следующим образом:

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

Обратите внимание, что вы работаете с Row s в API DataFrame, в то время как в RDD API объекты относятся к вашимтип.

...