Spark Java API中如何在GroupBy/PartitionBy中传入多列参数
Scala 集合传参写法的Java Spark API 等价实现
Scala 中可以通过:_*语法将集合展开为变长参数传入partitionBy、groupBy这类方法,在 Spark Java API 中可以利用Java变长参数的底层数组特性实现相同效果。
完整实现代码
import org.apache.spark.sql.expressions.Window; import org.apache.spark.sql.expressions.WindowSpec; import static org.apache.spark.sql.functions.desc; import java.util.ArrayList; import java.util.List; public class SparkDemo { public void testWindow() { List<String> partitions = new ArrayList<>(); partitions.add("p1"); partitions.add("p2"); // 核心逻辑:将List<String>转为String数组传入partitionBy WindowSpec windowSpec = Window.partitionBy(partitions.toArray(new String[0])) .orderBy(desc("some_date")); } }
额外说明
- Java 11+ 版本可以用更简洁的写法
partitions.toArray(String[]::new)实现数组转换,功能完全一致 - 该方案同样适用于Spark Java API中所有接收变长参数的方法,包括
groupBy()、select()、orderBy()等
内容的提问来源于stack exchange,提问作者Am1rr3zA
相关产品推荐
相关产品推荐

