首页 > 解决方案 > 如何创建数据集的数组或集合spark-dataframes 类型的?

问题描述

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

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

标签: javaapache-spark

解决方案


目前尚不清楚您要完成什么,因为您发布的示例如果合并则不会过滤任何内容。但你仍然可以这样做:

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

推荐阅读