scala - 克隆/深度复制 Spark 数据帧

标签 scala apache-spark apache-spark-sql

如何请求 DataFrame 的深拷贝 - 而不诉诸对原始 DataFrame 内容的完全重新计算?

目的是在 Spark Stream 上执行自联接。

最佳答案

数据帧是不可变的。这意味着您不必进行深度复制,您可以多次重用它们,并且在每次操作时都会创建新的数据帧,而原始数据帧将保持不变。

例如:

val df = List((1),(2),(3)).toDF("id")

val df1 = df.as("df1") //second dataframe
val df2 = df.as("df2") //third dataframe

df1.join(df2, $"df1.id" === $"df2.id") //fourth dataframe and df is still unmodified

这似乎是一种资源浪费,但由于数据帧中的所有数据也是不可变的,因此所有四个数据帧都可以重用对其中对象的引用。

关于scala - 克隆/深度复制 Spark 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047140/

相关文章:

java - Spark DataFrame 和重命名多列 (Java)

apache-spark - map 和 flatMap 之间有什么区别以及各自的良好用例?

amazon-web-services - AWS Glue Python 作业未创建新的数据目录分区

scala - Play Framework 2 : How to pass object between routes, View 和 Controller ?

java - 为什么scala中参数化类型的+运算符总是导致字符串

scala - 为使用 sbt-native-packager 创建的可执行文件设置 JVM 选项的推荐方法是什么?

scala - Spark Scala FoldLeft 在集群中运行时导致 StackOverflow

apache-spark - 加载 Hive 表时 Spark 创建了多少个分区

python - PySpark 中有等效的 .any() 吗?

scala - 将时间戳与 Spark 和 Scala 中的特定日期进行比较