200").limit(10)-6ren">
gpt4 book ai didi

apache-spark - 是否在 Apache Spark 中懒惰地评估文件的读取?

转载 作者:行者123 更新时间:2023-12-04 08:46:55 24 4
gpt4 key购买 nike

考虑下面的代码,

Val df1 = sparkSession.read().json("abc.json")

Val df2 = df1.where("point > 200").limit(10)

df2.count()
我的第一个问题是 , 当第一行被评估并且我的数据被读入 df1 时?调用计数操作时会发生这种情况吗?
我的第二个问题是 ,保存到 df1 的数据是否在 df1 中可用,直到程序执行结束,我也可以用它来执行任何其他操作?
Ex -   Val df3 = df1.where("point > 100")

df3.count()

最佳答案

Spark 有两个东西,操作和 Action 。所有的操作都是惰性的,并且在您调用操作(即计数、显示、保存)之前不会执行
在您的情况下,操作是 计数 .所以一旦你执行 df2.count() 以下事情发生。

  • spark 读取文件并创建数据帧,df1
  • 它应用您的逻辑并创建一个新的数据框 df2
  • 最后显示你的计数。

  • 第二个问题
    不,数据不像普通编程语言那样保存到数据帧中。这是懒惰的进化。所以一个 Action 会触发所有的步骤。
    如果你调用 df3.count 以下事情发生。
  • spark 将再次读取文件并创建数据帧,df1
  • 您将应用逻辑并创建新的数据框 d3。
  • 最后会显示一个计数。

  • 如果您计划对单个数据帧进行多项操作,您可以使用 保存该数据帧。缓存 功能。这会将数据帧放入内存中,因此不会再次执行之前的操作。
    所以你应该做的是。
    val df1 = sparkSession.read().json("abc.json")
    df1.cache() // all the data are saved to memory (or disk )

    val df2 = df1.where("point > 200").limit(10)
    df2.count() // However cache happens only after first action. So this line will execute reading file and caching it.

    val df3 = df1.where("point > 100")
    df3.count() // This won't read the file again.

    关于apache-spark - 是否在 Apache Spark 中懒惰地评估文件的读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64270266/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com