繁体   English   中英

Spark SQL加入真的很懒吗?

[英]Spark SQL join really lazy?

我在8个数据帧之间执行内连接,所有数据帧都来自同一个父节点。 示例代码:

// read parquet 
val readDF = session.read.parquet(...)
// multiple expensive transformations are performed over readDF, making its DAG grow

// repartition + cache
val df = readDF.repartition($"type").cache

val df1 = df.filter($"type" === 1)
val df2 = df.filter($"type" === 2)
val df3 = df.filter($"type" === 3)
val df4 = df.filter($"type" === 4)
val df5 = df.filter($"type" === 5)
val df6 = df.filter($"type" === 6)
val df7 = df.filter($"type" === 7)
val df8 = df.filter($"type" === 8)

val joinColumns = Seq("col1", "col2", "col3", "col4")
val joinDF = df1
  .join(df2, joinColumns)
  .join(df3, joinColumns)
  .join(df4, joinColumns)
  .join(df5, joinColumns)
  .join(df6, joinColumns)
  .join(df7, joinColumns)
  .join(df8, joinColumns)

出乎意料的是, joinDF句子需要很长时间。 加入应该是一种转变,而不是一种行动。

你知道发生了什么吗? 这是检查点的用例吗?

注意: - joinDF.explain显示长DAG谱系。 - 使用Spark 2.3.0和Scala

RDD JOIN,SPARK SQL JOIN被称为转换。 我在DataBricks Notebook上运行时没有任何问题,但我并不知道“...... //在readDF上执行多个昂贵的转换,使其DAG增长......可能在那里有一个Action。

实际上,检查点似乎可以解决长时间运行的问题。 它现在表现为转换,返回更快。 因此,我得出结论,延迟与大型DAG谱系有关。

此外,后续操作现在更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM