我正在使用Java过滤Spark中的avro文件。我针对不同类型的过滤条件(例如,等于,大于,小于)获得了不同的数据框,如下所示:
df1 = sourceDf.filter(sourceDf.col(fieldName).equalTo(value)),
df2 = sourceDf.filter(sourceDf.col(fieldName).gt(value)),
df3 = sourceDf.filter(sourceDf.col(fieldName).lt(value)) and so on....
现在,我想在一个集合或数组中收集所有数据帧(df1,df2,df3,...)`,而不是上面的单个数据帧。 请让我知道如何实现此目标,因为我是Java和apache-spark的新手。
我尝试了Dataset [] RecordCollection = new Dataset [3];但这是不允许的。
例外是:“无法创建数据集的通用数组”
答案 0 :(得分:0)
不清楚您要完成的目标,因为您发布的示例如果组合在一起,则不会进行任何过滤。但您仍然可以做到:
union
来自API:
Dataset<Row> df = df1.union(df2).union(df3)
或使用or
从开始过滤器开始:
Column c1 = sourceDf.col(fieldName).equalTo(value);
Column c2 = sourceDf.col(fieldName).gt(value);
Column c3 = sourceDf.col(fieldName).lt(value);
df1 = sourceDf.filter(c1.or(c2).or(c3))