我想在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")
您可以使用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