Pyspark 数据框作为视图
Posted
技术标签:
【中文标题】Pyspark 数据框作为视图【英文标题】:Pyspark Dataframes as View 【发布时间】:2019-05-13 14:32:23 【问题描述】:对于我正在运行的脚本,我有一堆查看 sql 中特定数据集的链式视图(我正在使用 Apache Spark SQL):
%sql
create view view_1 as
select column_1,column_2 from original_data_table
这个逻辑在view_n
中达到顶峰。
但是,我需要执行在 sql 中难以(或不可能)实现的逻辑,特别是 explode
命令:
%python
df_1 = sqlContext.sql("SELECT * from view_n")
df1_exploded=df_1.withColumn("exploded_column", explode(split(df_1f.col_to_explode,',')))
我的问题:
在 sql 表和 pyspark 数据帧之间切换是否存在速度成本?或者,由于 pyspark 数据帧是延迟评估的,它与视图非常相似吗?
有没有更好的方法从 sql 表切换到 pyspark 数据帧?
【问题讨论】:
【参考方案1】:您可以通过 Spark SQL (https://spark.apache.org/docs/latest/api/sql/index.html) 使用 explode()
以及 DF 拥有的任何东西
print(spark.version)
2.4.3
df = spark.createDataFrame([(1, [1,2,3]), (2, [4,5,6]), (3, [7,8,9]),],["id", "nest"])
df.printSchema()
root
|-- id: long (nullable = true)
|-- nest: array (nullable = true)
| |-- element: long (containsNull = true)
df.createOrReplaceTempView("sql_view")
spark.sql("SELECT id, explode(nest) as un_nest FROM sql_view").show()
df.createOrReplaceTempView("sql_view")
spark.sql("SELECT id, explode(nest) as flatten FROM sql_view").show()
+---+-------+
| id|flatten|
+---+-------+
| 1| 1|
| 1| 2|
| 1| 3|
| 2| 4|
| 2| 5|
| 2| 6|
| 3| 7|
| 3| 8|
| 3| 9|
+---+-------+
【讨论】:
我不知道!谢谢。但是,如果我想使用 pyspark,你知道如何在使用 Spark SQL 创建的视图上这样做吗? sure ...df = spark.sql("sql from view here")
... 视图只是通常从表等持久对象调用的 sql 查询,以显示一些聚合/KPI,因此据我所知,您只需阅读在视图的 sql 字符串中作为 df,但最好将视图保持为 sql 而不是 df,这样您就不会复制对象并且必须从 dfs 提升新视图,因为它会创建太多依赖项以上是关于Pyspark 数据框作为视图的主要内容,如果未能解决你的问题,请参考以下文章
在 pyspark sql 的连接中重复使用相同的数据框视图
为啥在 pyspark 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?
Pyspark - 在作为列表的 spark 数据框列上使用 reducebykey