使用ApacheSpark(Java)将CSV数据加载到Dataframe并转换为数组

使用ApacheSpark(Java)将CSV数据加载到Dataframe并转换为数组,java,csv,apache-spark,dataframe,apache-spark-dataset,Java,Csv,Apache Spark,Dataframe,Apache Spark Dataset,我有一个包含以下数据的CSV文件: 1,2,5 2,4 2,3 我想将它们加载到一个具有数组字符串模式的数据帧中 输出应该如下所示 [1, 2, 5] [2, 4] [2, 3] 这里使用scala回答了这个问题: 我想让它在Java中实现。 请帮助下面是Java中的示例代码。您需要使用spark.read().text(字符串路径)方法读取文件,然后调用split函数 import static org.apache.spark.sql.functions.split

我有一个包含以下数据的CSV文件:

1,2,5  
2,4  
2,3 
我想将它们加载到一个具有数组字符串模式的数据帧中

输出应该如下所示

[1, 2, 5]  
[2, 4]  
[2, 3] 
这里使用scala回答了这个问题:

我想让它在Java中实现。

请帮助

下面是Java中的示例代码。您需要使用
spark.read().text(字符串路径)
方法读取文件,然后调用
split
函数

import static org.apache.spark.sql.functions.split;

public class SparkSample {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .appName("SparkSample")
                .master("local[*]")
                .getOrCreate();
        //Read file
        Dataset<Row> ds = spark.read().text("c://tmp//sample.csv").toDF("value");
        ds.show(false);     
        Dataset<Row> ds1 = ds.select(split(ds.col("value"), ",")).toDF("new_value");
        ds1.show(false);
        ds1.printSchema();
    }
}
import static org.apache.spark.sql.functions.split;
公共类SparkSample{
公共静态void main(字符串[]args){
火花会话火花=火花会话
.builder()
.appName(“SparkSample”)
.master(“本地[*]”)
.getOrCreate();
//读取文件
数据集ds=spark.read().text(“c://tmp//sample.csv”).toDF(“值”);
ds.show(假);;
数据集ds1=ds.select(拆分(ds.col(“值”),“,”)).toDF(“新值”);
ds1.显示(假);
ds1.printSchema();
}
}

您可以使用VectorAssembler类创建功能数组,这对管道特别有用:

val assembler = new VectorAssembler()
  .setInputCols(Array("city", "status", "vendor"))
  .setOutputCol("features")

您附加的问题使用DSL。它在Java中也几乎类似。你试过写什么吗?如果是,您得到了什么错误?我试图加载一个RDD并将模式附加到它,如下所示:JavaRDD rowRDD=sparkSession.read().textFile(“D:\\sanjaya\\OAWorkspace\\spark basics\\src\\main\\resources\\marketbasketdata.csv”).JavaRDD().map((函数)record->{String[]attributes=record.split(,);return RowFactory.create(Arrays.asList(attributes));