[英]How to divide dataset in two parts based on filter in Spark-scala
是否可以使用单个滤波器将DF分为两部分?
假设df有以下记录
UID Col
1 a
2 b
3 c
如果我做
df1 = df.filter(UID <=> 2)
如何在一次操作中将过滤后的记录和未过滤的记录保存在不同的RDD中?
df1 can have records where uid = 2
df2 can have records with uid 1 and 3
如果您只对保存数据感兴趣,可以向DataFrame
添加一个指示符列:
val df = Seq((1, "a"), (2, "b"), (3, "c")).toDF("uid", "col")
val dfWithInd = df.withColumn("ind", $"uid" <=> 2)
并将其用作DataFrameWriter
的分区列,并使用一种受支持的格式(从1.6开始,它是Parquet,text和JSON):
dfWithInd.write.partitionBy("ind").parquet(...)
它将在写入时创建两个单独的目录( ind=false
, ind=true
)。
但是,一般而言,不可能从单个转换中产生多个RDDs
或DataFrames
。 请参阅如何将RDD分为两个或多个RDD?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.