我有一个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,但如果方案具有复杂类型(地图或数组),它就无法工作。
除了过滤两次外,还有其他任何方法可以一次完成吗?
提前致谢。
答案 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
B
与dataframe
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