在Spark中,如何将一个DataFrame拆分为两个DataFrame?

时间:2017-06-26 04:37:25

标签: apache-spark apache-spark-sql

我有一个DataFrame A的大数据。

我想对其应用一些过滤器并生成一个DataFrame B,并为未过滤的数据创建另一个DataFrame C.

总之,它类似于遵循伪代码。

for file in *.wav; do sox $file L$file remix 1; done

并且,B和C将被写入不同的表格。

我首先尝试过滤B并使用A.except(B)来制作C,但如果方案具有复杂类型(地图或数组),它就无法工作。

除了过滤两次外,还有其他任何方法可以一次完成吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以在dataframe A上使用简单val A = Seq( (1, 22), (2, 11), (10, 3), (20, 4) ).toDF("col1", "col2") A.show(false) api

A

您应该dataframe +----+----+ |col1|col2| +----+----+ |1 |22 | |2 |11 | |10 |3 | |20 |4 | +----+----+ 作为

def filter = col("col1") < 10

将过滤器定义为

dataframes

并将它们应用于不同的val B = A.filter(filter) B.show(false)

+----+----+
|col1|col2|
+----+----+
|1   |22  |
|2   |11  |
+----+----+

输出

C

您的dataframe Bdataframe val C = A.filter(!filter) C.show(false) 相反

+----+----+
|col1|col2|
+----+----+
|10  |3   |
|20  |4   |
+----+----+

输出

{{1}}

答案 1 :(得分:0)

您也可以使用SparkSql

来完成
val A = Seq(
  (1, 22),
  (2, 11),
  (10, 3),
  (20, 4)
).toDF("col1", "col2")

A.show(false)

val B = spark.sql(select * from A /*where = your condition for B*/) //spark is SparkSession or SQLContext
val C = spark.sql(select * from A /*where = your condition for C*/) //spark is SparkSession or SQLContext