如何创建Spark-DataFrames类型的Dataset <row>的数组或集合?

时间:2019-05-04 07:04:59

标签: java apache-spark

我正在使用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];但这是不允许的。

例外是:“无法创建数据集的通用数组”

1 个答案:

答案 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))