2016-10-07 13 views
7

Tôi đang cố gắng đọc tệp csv vào một khung dữ liệu. Tôi biết những gì các giản đồ của dataframe của tôi nên được kể từ khi tôi biết tập tin csv của tôi. Ngoài ra tôi đang sử dụng gói csv tia lửa để đọc các tập tin. Tôi cố gắng để xác định lược đồ như dưới đây.Cung cấp lược đồ khi đọc tệp csv dưới dạng một khung dữ liệu

val pagecount = sqlContext.read.format("csv") 
      .option("delimiter"," ").option("quote","") 
      .option("schema","project: string ,article: string ,requests: integer ,bytes_served: long") 
      .load("dbfs:/databricks-datasets/wikipedia-datasets/data-001/pagecounts/sample/pagecounts-20151124-170000") 

Nhưng khi tôi kiểm tra giản đồ của khung dữ liệu tôi đã tạo, có vẻ như đã lấy lược đồ riêng của nó. Tôi có làm gì sai không? làm thế nào để làm cho tia lửa để nhận các lược đồ tôi đã đề cập?

> pagecount.printSchema 
root 
|-- _c0: string (nullable = true) 
|-- _c1: string (nullable = true) 
|-- _c2: string (nullable = true) 
|-- _c3: string (nullable = true) 
+0

phiên bản spark bạn đang sử dụng? –

Trả lời

12

Hãy thử bên dưới, bạn không cần chỉ định lược đồ. khi bạn đưa ra suy luậnSchema là đúng, nó sẽ lấy nó từ tệp csv của bạn.

val pagecount = sqlContext.read.format("csv") 
    .option("delimiter"," ").option("quote","") 
    .option("header", "true") 
    .option("inferSchema", "true") 
    .load("dbfs:/databricks-datasets/wikipedia-datasets/data-001/pagecounts/sample/pagecounts-20151124-170000") 

nếu bạn muốn tự chỉ định các lược đồ, bạn cần làm như sau

import org.apache.spark.sql.types._ 

val customSchema = StructType(Array(
     StructField("project", StringType, true), 
     StructField("article", StringType, true), 
     StructField("requests", IntegerType, true), 
     StructField("bytes_served", DoubleType, true))) 

    val pagecount = sqlContext.read.format("csv") 
      .option("delimiter"," ").option("quote","") 
      .option("header", "true") 
      .schema(customSchema) 
      .load("dbfs:/databricks-datasets/wikipedia-datasets/data-001/pagecounts/sample/pagecounts-20151124-170000") 
+0

Tôi đã thử thực thi mã nhưng nó đã cho tôi lỗi dưới đây. val customSchema = StructType (Array ( StructField ("project", StringType, true), StructField ("article", StringType, true), StructField ("requests", IntegerType, true), StructField ("bytes_served", DoubleType, true))) : 30: lỗi: không tìm thấy: giá trị StructType val customSchema = StructType (Array ( – Pa1

+0

Về mặt lý thuyết tôi biết chúng tôi có thể đề cập đến lược đồ nhưng tôi bị mất về cách đề cập đến lược đồ dưới dạng cú pháp, là có bất kỳ trợ giúp nào mà tôi có thể tìm kiếm không? Tôi đã giới thiệu bit tài liệu chính thức không đề cập đến trường hợp này và không có nhiều ví dụ – Pa1

+0

bạn có thể đính kèm ảnh chụp màn hình lỗi một lần –

0

Nhờ có câu trả lời bằng @Nulu, nó hoạt động cho pyspark với tối thiểu chỉnh

from pyspark.sql.types import LongType, StringType, StructField, StructType, BooleanType, ArrayType, IntegerType 

customSchema = StructType(Array(
    StructField("project", StringType, true), 
    StructField("article", StringType, true), 
    StructField("requests", IntegerType, true), 
    StructField("bytes_served", DoubleType, true))) 

pagecount = sc.read.format("com.databricks.spark.csv") 
     .option("delimiter"," ") 
     .option("quote","") 
     .option("header", "false") 
     .schema(customSchema) 
     .load("dbfs:/databricks-datasets/wikipedia-datasets/data-001/pagecounts/sample/pagecounts-20151124-170000") 
-1

Dưới đây là cách bạn có thể làm việc với giản đồ tùy chỉnh, bản trình diễn hoàn chỉnh:

$> mã shell,

echo " 
Slingo, iOS 
Slingo, Android 
" > game.csv 

đang Scala:

import org.apache.spark.sql.types._ 

val customSchema = StructType(Array(
    StructField("game_id", StringType, true), 
    StructField("os_id", StringType, true) 
)) 

val csv_df = spark.read.format("csv").schema(customSchema).load("game.csv") 
csv_df.show 

csv_df.orderBy(asc("game_id"), desc("os_id")).show 
csv_df.createOrReplaceTempView("game_view") 
val sort_df = sql("select * from game_view order by game_id, os_id desc") 
sort_df.show 
+0

http://mujiang.blogspot.ca/2018/01/ work-with-custom-schema-with-spark.html –

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