Выбор кадра Spark с использованием SQL без createOrReplaceTempView - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел выполнить SQL подобный синтаксис для фрейма данных Spark df. Допустим, мне нужен расчет

cal_col = 113.4*col1 +41.4*col2....

В данный момент я делаю либо:

1 / Вещание в режиме временного просмотра:

df.createOrReplaceTempView("df_view")
df = spark.sql("select *, 113.4*col1 +41.4*col2... AS cal_col from df_view")

Вопрос: есть ли много накладных расходов, передавая большой df как вид? Если да, в какой момент это больше не имеет смысла? Допустим, df имеет 250 столбцов, 15 миллионов записей.

2 / Синтаксис фрейма данных Pyspark, который немного сложнее для чтения и требует модификации из формулы:

df = df.withColumn("cal_col", 113.4*F.col("col1") + 41.4*F.col("col2")+...)

Формула может быть длинным и стать трудным для чтения.

Вопрос: Есть ли способ написать как SQL -подобный синтаксис без F.col?

Что-то в строке

 df = df.select("*, (113.4*col1 +41.4*col2...) as cal_col")

1 Ответ

1 голос
/ 31 марта 2020

Вы можете использовать df.selectExpr("") для написания искры в SQL, как синтаксис на вашем dataframe.

df.selectExpr("*, (113.4*col1 +41.4*col2...) as cal_col")

Кроме того, лучший способ добиться желаемого вместо создания * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * *1013* * * * * * * * * * * * * *1011* * * * * * * *1011* *1011*. *1011*.

Ссылка: https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark. sql .DataFrame.selectExpr

...