2014-11-17 20 views
7

không châm ngòi sql cung cấp cách nào để tự động tải dữ liệu csv? Tôi tìm thấy Jira sau: https://issues.apache.org/jira/browse/SPARK-2360 nhưng nó đã đóng cửa ....Spark SQL: tự động schema từ csv

Hiện nay tôi sẽ tải một tập tin csv như sau:

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

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

Bất kỳ gợi ý về việc khấu trừ schema tự động từ các tập tin csv? Cụ thể a) làm thế nào tôi có thể tạo ra một lớp đại diện cho lược đồ và b) làm thế nào tôi có thể tự động điền vào nó (tức là Record (r (0), r (1), .....))?

Cập nhật: Tôi tìm thấy một câu trả lời một phần cho thế hệ schema ở đây: 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) 

Vậy câu hỏi duy nhất còn lại sẽ là làm thế nào để làm các bước map(p => Row(p(0), p(1).trim)) động cho số lượng nhất định các thuộc tính?

Cám ơn sự ủng hộ của bạn! Joerg

Trả lời

5

Bạn có thể sử dụng spark-csv nơi bạn có thể tiết kiệm một vài tổ hợp phím không cần phải xác định các tên cột và tự động sử dụng các tiêu đề.

+0

Tôi nghĩ rằng câu hỏi ban đầu là hỏi về làm việc với 'trường hợp lớp' thay vì' DataFrame' –

+1

@ user955091 lý do của bạn cho downvoting không được xem xét: 1) câu hỏi là nhiều hơn về việc tìm kiếm một giải pháp giải quyết xung quanh spark sql và csv hơn là về trường hợp các lớp, 2) câu trả lời đã được chấp nhận bởi tác giả của câu hỏi, 3) câu trả lời đã tích luỹ 4 upvotes trước khi downvote của bạn. Vì vậy, bạn không nghĩ rằng downvoting của bạn là một chút khắc nghiệt? – dimitrisli

4
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) 

Có thể liên kết này sẽ giúp bạn.

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

Các vấn đề liên quan