2016-04-08 21 views
0

Şimdiden teşekkürler.Spark Dataframe: Sıra nesne ayırıcı

Merhaba, Merhaba, bazı veri işleme için kıvılcım dataframe ve scala kullanıyorum, aynı veri türü olan birden çok sütun okumam gereken bir gereksinimim var, yani benim durumumda parke dosyasından yapı türünü işlemek ve yeni oluşturmak için şemaya sahip veri şeması yapı türü alanları ile aynıdır, yani alan1, alan2 ve alan3 ve veri çerçevesini aşağıda gösterilen tüm sütunlardan gelen verilerle doldurun.

örn i 3 sütun

olduğunu varsayalım ben kod dönüş Sıra nesnesi Üstü kod parçacığı

dataframe.select("column1","column2","column3") 

altına kullanarak sütunlarından tüm değerleri okumak mümkün duyuyorum

a)column1: struct (nullable = true) 
    |-- field1: string (nullable = true) 
    |-- field2: string (nullable = true) 
    |-- field3: string (nullable = true) 

b)column2: struct (nullable = true) 
    |-- field1: string (nullable = true) 
    |-- field2: string (nullable = true) 
    |-- field3: string (nullable = true) 

c)column3: struct (nullable = true) 
    |-- field1: string (nullable = true) 
    |-- field2: string (nullable = true) 
    |-- field3: string (nullable = true) 

[[column1field1,column1field2,column1field3],null,null] 
[null,[column2field1,column2field2,column2field3],null] 
[null,null,[column3field1,column3field2,column3field3]] 
[[column1field1,column1field2,some record, with multiple,separator],null,null] 

Buradaki endişe, "," ayırıcısını kullanarak satır nesnesinden değerler okuyabildiğim ve 3 alanlı veri çerçevesi, ancak alanlar dizge olarak, son satır nesnesinde dizge verisinin kendisinde birden fazla "," gibi birden fazla "," kullanıyorum, böylece veri şeması şemasında bir soruna neden oluyor. " , "Row nesnesinin değerlerini almak için ayırıcı ve bana 3'ten fazla alan veriyor. Bu hatadan nasıl kurtulabilirim? Bu sabit için Satır dizisi değerinin nesne ayırıcısını Spark içinde değiştirmek için herhangi bir hüküm var mı?

+0

Sorunun nerede olduğunu görmek istemediğimden emin değilim. – eliasah

+0

Evet eliasah, Bu hatayı tekrar edemediğim yanlış bir başlık koymuştum. Ama umarım sorunu anlıyorsundur. – nilesh1212

cevap

0

Evet, kullandığınız kıvılcım sürümüne bağlı

sqlContext.load("com.databricks.spark.csv", yourSchema, Map("path" -> yourDataPath, "header" -> "false", "delimiter" -> "^")) 

VEYA

sqlContext.read.format("com.databricks.spark.csv").schema(yourSchema).options(Map("path" -> schema, "header" -> "false", "delimiter" -> "^")).load() 

gibi farklı bir ayırıcı ile yükleyebilirsiniz.

Dizelerinizdeki sınırlayıcılarla ilgili olarak, ya ',' sınırlayıcıyla yüklemeden önce ya da farklı bir sınırlayıcı kullanmadan önce bunlardan kurtulmanız gerekir.