jav*_*dba 7 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
Run Code Online (Sandbox Code Playgroud)
这似乎是一种资源浪费,但由于数据帧中的所有数据也是不可变的,因此所有四个数据帧都可以重用对其中对象的引用。