【问题标题】:Pyspark Dataframes as ViewPyspark 数据框作为视图
【发布时间】: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,',')))

我的问题:

  1. 在 sql 表和 pyspark 数据帧之间切换是否存在速度成本?或者,由于 pyspark 数据帧是延迟评估的,它与视图非常相似吗?

  2. 有没有更好的方法从 sql 表切换到 pyspark 数据帧?

【问题讨论】:

    标签: sql view pyspark apache-spark-sql


    【解决方案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 提升新视图,因为它会创建太多依赖项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2019-04-05
    • 2021-08-26
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多