2016-10-07 36 views
7

Bir csv dosyasını bir veri çerçevesine okumaya çalışıyorum. Veri dosyamın şemasının csv dosyamı bildiğimden beri ne olacağını biliyorum. Ayrıca dosyayı okumak için kıvılcım csv paketi kullanıyorum. Aşağıdaki gibi şema belirtmeye çalışıyorum.Csv dosyasını bir dataframe olarak okurken şema sağlayın

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

Oluşturduğum veri çerçevesinin şemasını denetlediğimde, kendi şemasını almış gibi görünüyor. Yanlış bir şey yapıyorum? Bahsettiğim şemayı almak için kıvılcım yapmak nasıl?

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

kullandığınız kıvılcım versiyonu? –

cevap

12

Aşağıdakileri deneyin, şemayı belirtmeniz gerekmez. inferSchema'yı true olarak verdiğinizde, onu csv dosyanızdan almalısınız. el şema belirtmek istiyorsanız

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

, sen @Nulu tarafından cevap

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

Kodu çalıştırmayı denedim ama bana aşağıdaki hatayı verdi. val customSchema = StructType (Array(), gerçek StructField ("projesi", StringType, StructField (true "makale", StringType,), StructField ("istekleri",), gerçek IntegerType, StructField ("bytes_served", DoubleType, true))) : 30: hata: bulunamadı: value StructType val customSchema = YapıTürü (Dizi ( – Pa1

+0

Teorik olarak şemadan bahsedebiliriz ama şema sözdiziminden nasıl bahsedileceğine dair kaybolacağım Buraya bakabileceğim herhangi bir yardım var mı? Ben resmi belgelerden bahsetmiştim, bu durumdan bahsetmiyorum ve çok fazla örnek yok – Pa1

+0

hata ekran görüntüsünü ekleyebilirsin –

0

teşekkür aşağıdaki gibi yapmanız gereken, asgari

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
değiştirmeyi pyspark için çalışıyor

Özel bir şema ile çalışabilirsiniz tam bir demo:

$> kabuk kodu,

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

Scala kodu:

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/ işe-with-özel-şema ile-spark.html –