JavaApacheSpark将TSV格式转换为JavaRDD
我需要实现一个JavaSpark程序来计算给定索引处具有相同列值的元组。其中,命令行参数是[输入路径][列索引][输出路径]。 输入是一个TSV文件,格式为:注册(入学号、姓、名、讲座、学期)JavaApacheSpark将TSV格式转换为JavaRDD,java,apache-spark,Java,Apache Spark,我需要实现一个JavaSpark程序来计算给定索引处具有相同列值的元组。其中,命令行参数是[输入路径][列索引][输出路径]。 输入是一个TSV文件,格式为:注册(入学号、姓、名、讲座、学期) 1234图形波利大数据智慧15 5678康达安娜大数据智慧16 9012 Jeego Hugh大数据智慧16 1234图形Polly数据挖掘WiSe16 3456 Downe Sid Data Mining WiSe16 Tsv是一个以制表符作为分隔符的csv文件,因此最简单的方法是使用Datafram
1234图形波利大数据智慧15
5678康达安娜大数据智慧16
9012 Jeego Hugh大数据智慧16
1234图形Polly数据挖掘WiSe16
3456 Downe Sid Data Mining WiSe16 Tsv是一个以制表符作为分隔符的csv文件,因此最简单的方法是使用Dataframe API读取该文件。如果需要,可以稍后将数据帧转换为rdd
首先,进行Spark课程:
SparkSession spark=SparkSession.builder()
.master(“本地[*]”)
.appName(“SparkTest”)
.getOrCreate();
现在可以读取该文件:
Dataset df=spark。
read()。
选项(“分隔符”、“\t”)。
选项(“标题”,false)。
csv();
由于csv阅读器负责格式化业务,因此不再需要手动拆分行
在下一步中,将提取列名。当读卡器选项标题设置为false
时,列名将是通用名称,如\u c0
,\u c1
。。。在本例中,我们按第四列(基于0索引)分组,因此选择此列名
int索引=3;
String columnname=df.schema().fieldNames()[index];
作为最后一步,我们根据所选列对数据帧进行分组,并计算每组的行数:
df.groupBy(columnname)
.count()
.show();
输出为:
+-----------+-----+
|_c3 |计数|
+-----------+-----+
|数据挖掘| 2|
|大数据| 3|
+-----------+-----+
如果需要,还可以将结果转换为rdd:
JavaRDD rdd=df.groupBy(columnname)
.count()
.toJavaRDD();
但通常情况下,DataFrameAPI与RDDAPI相比要多得多