繁体   English   中英

Spark:将CSV转换为RDD [行]

[英]Spark: convert a CSV to RDD[Row]

我有一个.csv文件,该文件包含以下结构的258列。

["label", "index_1", "index_2", ... , "index_257"]

现在,我想将此.csv文件转换为RDD [Row]:

val data_csv = sc.textFile("~/test.csv")

val rowRDD = data_csv.map(_.split(",")).map(p => Row( p(0), p(1).trim, p(2).trim)) 

如果以这种方式进行转换,则必须专门记下258列。 所以我尝试了:

val rowRDD = data_csv.map(_.split(",")).map(p => Row( _ => p(_).trim)) 

val rowRDD = data_csv.map(_.split(",")).map(p => Row( x => p(x).trim))

但是这两个也不起作用并报告错误:

error: missing parameter type for expanded function ((x$2) => p(x$2).trim)

谁能告诉我如何进行转换? 非常感谢。

您应该使用sqlContext而不是sparkContext作为

val df = sqlContext.read
  .format("com.databricks.spark.csv")
  .option("header", true)
  .load(("~/test.csv")

这将创建dataframe df上调用.rdd应该会给您RDD[Row]

val rdd = df.rdd

而是以textFile的形式读取使用spark-csv读取CSV文件

就你而言

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .option("quote", "\"")  //escape the quotes 
    .option("ignoreLeadingWhiteSpace", true)  // escape space before your data
    .load("cars.csv")

这会将数据作为数据帧加载,现在您可以轻松地将其更改为RDD。

希望这可以帮助!

除了正确的其他答案之外,执行您要执行的操作的正确方法是在map函数内使用Row.fromSeq

val rdd = sc.parallelize(Array((1 to 258).toArray, (1 to 258).toArray) )
            .map(Row.fromSeq(_))

这将使您的rdd键入Row

 Array[org.apache.spark.sql.Row] = Array([1,2,3,4,5,6,7,8,9,10...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM