下面是使用Apache Spark和Java按列分组并将每个字符串组写入文本文件的代码示例:
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import java.util.Arrays;
import java.util.List;
public class GroupByColumnExample {
public static void main(String[] args) {
// 创建Spark上下文
JavaSparkContext sc = new JavaSparkContext("local", "GroupByColumnExample");
// 创建输入数据
List data = Arrays.asList(
"apple,red",
"banana,yellow",
"cherry,red",
"date,brown",
"elderberry,purple"
);
// 将输入数据转换为RDD
JavaRDD inputRDD = sc.parallelize(data);
// 按照逗号分割每个字符串为键值对
JavaRDD> keyValueRDD = inputRDD.mapToPair(new PairFunction() {
@Override
public Tuple2 call(String s) throws Exception {
String[] parts = s.split(",");
return new Tuple2<>(parts[1], parts[0]);
}
}).reduceByKey(new Function2() {
@Override
public String call(String s1, String s2) throws Exception {
return s1 + "," + s2;
}
}).mapToPair(new PairFunction, String, String>() {
@Override
public Tuple2 call(Tuple2 tuple) throws Exception {
return new Tuple2<>(tuple._1, tuple._2);
}
});
// 将每个字符串组写入文本文件
keyValueRDD.saveAsTextFile("output.txt");
// 关闭Spark上下文
sc.close();
}
}
这段代码首先创建了一个JavaSparkContext
对象,然后创建了一个包含输入数据的RDD。接下来,使用mapToPair
函数将每个字符串按逗号分割为键值对,其中键是第二个部分,值是第一个部分。然后使用reduceByKey
函数将具有相同键的所有值组合在一起。最后,使用mapToPair
函数将结果的键值对顺序调换回来。最后,将结果RDD保存到文本文件中。