JavaRDD<;字符串>;到JavaRDD<;世界其他地区>;
我使用以下命令将txt文件作为JavaRDD读取:JavaRDD<;字符串>;到JavaRDD<;世界其他地区>;,java,apache-spark,rdd,Java,Apache Spark,Rdd,我使用以下命令将txt文件作为JavaRDD读取: JavaRDD<String> vertexRDD = ctx.textFile(pathVertex); JavaRDD vertexRDD=ctx.textFile(pathVertex); 现在,我想将其转换为JavaRDD,因为在该txt文件中,我有两列整数,并希望在拆分列后向行添加一些模式 我也试过: JavaRDD<Row> rows = vertexRDD.map(line -> line.spl
JavaRDD<String> vertexRDD = ctx.textFile(pathVertex);
JavaRDD vertexRDD=ctx.textFile(pathVertex);
现在,我想将其转换为JavaRDD,因为在该txt文件中,我有两列整数,并希望在拆分列后向行添加一些模式
我也试过:
JavaRDD<Row> rows = vertexRDD.map(line -> line.split("\t"))
javarddrows=vertexRDD.map(line->line.split(“\t”))
但是is说我不能将map函数分配给“Object”RDD
谢谢 当您应用诸如
map
之类的转换时,从另一个创建JavaRDD
是隐式的。这里,您创建的RDD是字符串数组的RDD(拆分的结果)
要获取行的RDD,只需从数组中创建一行:
JavaRDD vertexRDD=ctx.textFile(“”);
JavaRDD rddOfArrays=vertexRDD.map(line->line.split(“\t”);
JavaRDD rddOfRows=rddOfArrays.map(fields->RowFactory.create(fields));
请注意,如果您的目标是将JavaRDD
转换为数据帧(Dataset
),那么有一种更简单的方法。您可以在使用spark.read
时更改分隔符选项,以避免使用RDD:
Dataset<Row> dataframe = spark.read()
.option("delimiter", "\t")
.csv("your_path/file.csv");
Dataset dataframe=spark.read()
.option(“分隔符”、“\t”)
.csv(“您的路径/file.csv”);
您可以将这两列定义为类的字段,然后使用
JavaRDD<Row> rows = rdd.map(new Function<ClassName, Row>() {
@Override
public Row call(ClassName target) throws Exception {
return RowFactory.create(
target.getField1(),
target.getUsername(),
}
});
javarddrows=rdd.map(新函数(){
@凌驾
公用行调用(类名目标)引发异常{
返回RowFactory.create(
target.getField1(),
target.getUsername(),
}
});
然后创建StructField,
最终使用
StructType struct = DataTypes.createStructType(fields);
Dataset<Row> dataFrame = sparkSession.createDataFrame(rows, struct);
StructType struct=DataTypes.createStructType(字段);
Dataset dataFrame=sparkSession.createDataFrame(行,结构);
您之所以在数据帧上使用RDD,有什么原因吗?能否在文本文件的开头添加几行?