将 CSV 数据加载到 Dataframe 并使用 Apache Spark (Java) 转换为 Array

Posted

技术标签:

【中文标题】将 CSV 数据加载到 Dataframe 并使用 Apache Spark (Java) 转换为 Array【英文标题】:Load CSV data in to Dataframe and convert to Array using Apache Spark (Java) 【发布时间】:2017-12-07 03:35:23 【问题描述】:

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

1,2,5  
2,4  
2,3 

我想将它们加载到具有数组字符串架构的 Dataframe 中

输出应该如下所示。

[1, 2, 5]  
[2, 4]  
[2, 3] 

这里已经使用 scala 回答了这个问题: Spark: Convert column of string to an array

我想用 Java 实现它。 请帮忙

【问题讨论】:

您附加的问题使用了DSL。它在 Java 中也几乎相似。你试过写什么吗?如果是,您遇到了什么错误? 我试图加载它一个 RDD 并将模式附加到它,如下所示: JavaRDD rowRDD = sparkSession.read().textFile("D:\\sanjaya\\OAWorkspace\\spark -basics\\src\\main\\resources\\marketbasketdata.csv") .javaRDD().map((Function) 记录 -> String[] attributes = record.split(",") ; return RowFactory.create(Arrays.asList(attributes)); 【参考方案1】:

以下是 Java 中的示例代码。您需要使用spark.read().text(String path) 方法读取您的文件,然后调用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();
    

【讨论】:

【参考方案2】:

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

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

https://spark.apache.org/docs/2.2.0/ml-features.html#vectorassembler

【讨论】:

以上是关于将 CSV 数据加载到 Dataframe 并使用 Apache Spark (Java) 转换为 Array的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 加载到 Pandas MultiIndex DataFrame

将 CSV 数据文件上传到 Pandas Dataframe 时如何分配标签和特征

如何从 csv 文件中提取图像、标签并使用 Torch 创建训练集?

将多个csv文件导入pandas并合并到一个DataFrame中

如何在 Spark Dataframe 中显示完整的列内容?

有没有办法将 csv 数据加载到雪花表中并报告每条记录是不是已成功加载? (使用 Python)