7

spark sql は csv データを自動的にロードする方法を提供しますか? 次の Jira を見つけました: https://issues.apache.org/jira/browse/SPARK-2360しかし、閉じられていました....

現在、次のように csv ファイルをロードします。

case class Record(id: String, val1: String, val2: String, ....)

 sc.textFile("Data.csv")
.map(_.split(",")) 
.map { r =>                  
   Record(r(0),r(1), .....)
}.registerAsTable("table1")

csv ファイルからの自動スキーマ推定に関するヒントはありますか? 具体的には、a) スキーマを表すクラスを生成するにはどうすればよいですか? b) 自動的に入力するにはどうすればよいですか (つまり、Record(r(0),r(1), .....))?

更新: ここでスキーマ生成に対する部分的な回答を見つけました: http://spark.apache.org/docs/1.1.0/sql-programming-guide.html#data-sources

// The schema is encoded in a string
val schemaString = "name age"
// Generate the schema based on the string of schema
val schema =
 StructType(
schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))
// Convert records of the RDD (people) to Rows.
val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim))
// Apply the schema to the RDD.
val peopleSchemaRDD = sqlContext.applySchema(rowRDD, schema)

したがって、残された唯一の問題は map(p => Row(p(0), p(1).trim))、指定された数の属性に対して動的にステップを実行する方法でしょうか?

ご協力ありがとうございました!ヨルグ

4

2 に答える 2

5
val schemaString = "name age".split(" ")
// Generate the schema based on the string of schema
val schema =   StructType(schemaString.map(fieldName => StructField(fieldName, StringType, true)))
val lines = people.flatMap(x=> x.split("\n"))
val rowRDD = lines.map(line=>{
  Row.fromSeq(line.split(" "))
})
val peopleSchemaRDD = sqlContext.applySchema(rowRDD, schema)

このリンクが役立つかもしれません。

http://devslogics.blogspot.in/2014/11/spark-sql-automatic-schema-from-csv.html

于 2014-11-21T05:54:55.717 に答える
5

列名を定義してヘッダーを自動使用する必要がなく、いくつかのキーストロークを節約できるspark-csvを使用できます。

于 2015-02-25T01:19:43.700 に答える