【问题标题】:What to use to store intermediate data in Spark?在 Spark 中使用什么来存储中间数据?
【发布时间】:2021-10-20 08:00:00
【问题描述】:

在 Dataframes 或 TempViews 中存储中间表有什么区别?内存有区别吗?

【问题讨论】:

  • 应用上还是应用内?
  • 在一个应用程序中。
  • 您问题的真正主旨是什么。答案不是恕我直言的答案。中间表有什么用?评估时的 df 也是中间值。
  • 您能回复答案并选择您认为最好的答案吗?

标签: scala dataframe apache-spark view


【解决方案1】:

Dataframes 本身是中间“表”。这可以缓存到内存和/或磁盘。我将通过 Catalyst 抛开代码的概念。

来自tempviews上的手册:

以编程方式运行 SQL 查询

  • SparkSession 上的 sql 函数使应用程序能够以编程方式运行 SQL 查询并将结果作为 DataFrame 返回。

  • 为了做到这一点,您将 dataFrame 注册为 SQL 临时视图。这是一个“懒惰”的人工制品,必须已经存在一个数据框/数据集。只需要注册允许SQL接口。

    • Caching 在重复访问方面的基础数据帧帮助。
    • tempview 是内存中对数据帧的引用,通常没有开销。

总而言之,在 Spark 应用程序中,数据框是临时数据 存储/中间表你可以争论后者。如果您需要针对一个复杂的 SQL 数据帧 API 无法处理的数据帧,那么我们使用 临时视图。这和 spark sql 对一个真正的 Hive 或 jdbc 读表是不同的,但是接口是一样的。

这个顺便说一句是一个很好的参考: https://medium.com/@kar9475/data-sharing-between-multiple-spark-jobs-in-databricks-308687c99897

【讨论】:

    【解决方案2】:

    您可以将 TempView 视为一个临时 hive 表,只要底层 Spark 会话未关闭,它就存在。

    因此,如果您有一个数据框 df 并运行 df.createOrReplaceTempView("something"),只要首先调用 createOrReplaceTempView,您就可以在项目中的任何位置(在同一个 Spark 会话中)通过 val df = spark.table("something") 检索 df。

    更多信息在这里How does createOrReplaceTempView work in Spark?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2010-11-05
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多