没有 createOrReplaceTempView 使用 SQL 的 Spark 数据框 select
Spark dataframe select using SQL without createOrReplaceTempView
我想在 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 dataframe语法,阅读起来有点困难,需要修改公式:
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
中编写 spark,就像 dataframe
上的语法一样。
df.selectExpr("*, (113.4*col1 +41.4*col2...) as cal_col")
此外,一个更好的方法是 而不是创建视图 ,是在将数据帧发送到 [=23= 的逻辑之前 df.persist()
]内存(默认情况下溢出到磁盘) 然后 运行 你的 selectExpr
就可以了。
Link: https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.selectExpr
我想在 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 dataframe语法,阅读起来有点困难,需要修改公式:
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
中编写 spark,就像 dataframe
上的语法一样。
df.selectExpr("*, (113.4*col1 +41.4*col2...) as cal_col")
此外,一个更好的方法是 而不是创建视图 ,是在将数据帧发送到 [=23= 的逻辑之前 df.persist()
]内存(默认情况下溢出到磁盘) 然后 运行 你的 selectExpr
就可以了。
Link: https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.selectExpr