[使用SQL而不使用createOrReplaceTempView的Spark数据帧选择

问题描述 投票:0回答:1

我想在Spark数据帧df上执行类似SQL的语法。假设我需要计算

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列,有1500万条记录。

2 / Pyspark数据帧语法,这有点难以理解,需要根据公式进行修改:

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

该公式可能很长,很难阅读。

问题:有没有F.col的类似SQL语法的写法?

沿线的事物

 df = df.select("*, (113.4*col1 +41.4*col2...) as cal_col")
apache-spark pyspark apache-spark-sql pyspark-sql pyspark-dataframes
1个回答
0
投票

您可以使用df.selectExpr("")SQL中写火花,就像dataframe上的语法一样。

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

另外,更好的方法是想要而不是创建视图,是在逻辑上将数据帧发送到内存(默认情况下溢出到磁盘,默认情况下为磁盘))到df.persist()”,然后然后在其上运行selectExpr

链接:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.selectExpr

© www.soinside.com 2019 - 2024. All rights reserved.