Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaRDD<;字符串>;到JavaRDD<;世界其他地区>;_Java_Apache Spark_Rdd - Fatal编程技术网

JavaRDD<;字符串>;到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

我使用以下命令将txt文件作为JavaRDD读取:

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

  • 如何从JavaRDD中创建JavaRDD
  • 如何使用映射到JavaRDD

  • 谢谢

    当您应用诸如
    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,有什么原因吗?能否在文本文件的开头添加几行?