2016-10-07 1 views
7

Я пытаюсь прочитать файл csv в dataframe. Я знаю, какой должна быть схема моего фреймворка, поскольку я знаю свой файл csv. Также я использую искровый пакет csv для чтения файла. Я пытаюсь указать схему, как показано ниже.Предоставить схему при чтении файла csv как dataframe

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

Но когда я проверяю схему созданного мной фрейма данных, он, похоже, принял свою схему. Я что-то делаю неправильно? как заставить искра подобрать схему, о которой я упомянул?

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

версию искры вы используете? –

ответ

12

Попробуйте ниже, вам не нужно указывать схему. когда вы даете inferSchema как истинный, он должен взять его из вашего csv-файла.

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

, если вы хотите, чтобы вручную указать схему, что вам нужно сделать, как показано ниже

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

Я попытался выполнить код, но он дал мне следующую ошибку. Вал customSchema = StructType (Array ( StructField ("проект", StringType, правда), StructField ("статья", StringType, правда), StructField ("запросы", IntegerType, правда), StructField ("bytes_served", DoubleType, true))) : 30: error: not found: значение StructType val customSchema = StructType (Array ( – Pa1

+0

) Теоретически я знаю, что мы можем упомянуть схему, но я потерял упоминание схемы в терминах синтаксиса: есть ли какая-нибудь помощь, которую я могу найти? Я сослался на официальную документацию, она не упоминает этот случай и не имеет большого количества примеров. – Pa1

+0

вы можете приложить скриншот ошибки один раз –

0

Благодаря ответ по @Nulu, он работает для pyspark с минимальной настройки

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

Вот как вы можете работать с пользовательской схемой, полной демонстрацией:

$ shell code,

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

код 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/ работать-с обычаем-схема-с-spark.html –

Смежные вопросы