#pyspark #apache-spark-sql
Вопрос:
Приведенный ниже код работает
from pyspark.sql.functions import expr
df = spark.createDataFrame([(2020, 6, 26), (1000, 2, 29), (-44, 1, 1)],['Y', 'M', 'D'])
df.select("*",expr("make_date(Y,M,D) as lk")).show()
Приведенный ниже код завершается ошибкой с сообщением «не удается импортировать имя ‘make_date’ из ‘pyspark.sql.functions'».
from pyspark.sql.functions import expr, make_date
df = spark.createDataFrame([(2020, 6, 26), (1000, 2, 29), (-44, 1, 1)],['Y', 'M', 'D'])
df.select(make_date(df.Y,df.M,df.D).alias("datefield")).show()
И есть другие функции, такие как сумма, среднее значение и т. Д., Которые Хорошо сочетаются с предложением groupBy фрейма данных .
df3.groupBy(df3.hair).agg(sum_(df3.age),max_(df3.age)).show()
Я здесь в замешательстве. Почему некоторые функции не используются непосредственно со столбцом фрейма данных и только в качестве выражения sql.
Документация spark показывает все функции, выполняемые в виде инструкции sql, а не непосредственно в столбце фрейма данных
https://spark.apache.org/docs/latest/sql-ref-functions-builtin.html
Комментарии:
1. это просто потому, что не каждая функция sql имеет соответствующую реализацию в pyspark
2. @mck Я думаю, что это ответ, который я искал . Таким образом , для работы с кадрами данных не все встроенные функции можно использовать непосредственно в столбце кадра данных . Мы должны использовать выражение sql, чтобы применить его к фрейму данных . Как мы узнаем, какой из них может работать напрямую, а какой нуждается в выражении sql . Есть ли какая-либо документация на это?
3. spark.apache.org/docs/latest/api/sql/index.html и spark.apache.org/docs/3.0.2/api/python/pyspark.sql.html
4. @mck спасибо вам за список .. Но у меня есть вопрос . В этом списке функций ,как мы узнаем , какая из них работает в обоих направлениях, например, функция sum(столбец). Это есть в обоих списках . Каким бы способом мы его ни использовали , либо непосредственно в столбце фрейма данных, либо с помощью выражения sql, имя функции должно быть импортировано из pyspark.sql.functions . Это правильно ?
Ответ №1:
Чтобы правильно использовать функции pyspark, вы должны импортировать их.
from pyspark.sql.functions import sum, max
или
from pyspark.sql.functions import *
Однако в этом случае функции нельзя отличить от собственных функций python, sum
и max
. Чтобы избежать этого,
from pyspark.sql import functions as f
и используйте функцию pyspark таким образом f.sum
, и f.max
. Если вы неправильно импортируете функции, функция агрегирования кадров данных также не будет работать.