2016-04-08 9 views
0

ありがとうございます。スパークデータフレーム:行オブジェクトセパレータ

こんにちは、 私はspark dataframeとscalaをいくつかのデータ処理に使用しています。同じデータ型の複数の列を読み込む必要があります。構造体タイプのフィールド(field1、field2、field3)と同じスキーマを持つデータフレームを作成し、以下に示すすべての列のデータをデータフレームに取り込みます。

例えば、私は

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

コードリターンRowオブジェクト上記のコードの下に

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

を使用して列のすべての値を読み取ることができています、私は3列

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) 

があるとしここでの懸念は、 "、"区切り文字を使用して行オブジェクトから値を読み取ることができ、 3つのフィールドを持つデータフレームですが、フィールドが文字列であるため、最後のRowオブジェクトに上に表示されているように文字列データ自体に複数の "、"があるため、データフレームスキーマに問題が発生します。 、 "行オブジェクトの値を取得するためのセパレータ、それは私に3つ以上のフィールドを与えています。 このエラーを解決するにはどうすればよいですか?この問題を解決するために行配列値のオブジェクト区切りをSparkで変更する規定はありますか?

+0

私はあなたが求めているものではないエラーがどこにあるのかわかりません。 – eliasah

+0

はいeliasah、私は間違ったタイトルを入れて、私はそれを変更するこのエラーにrevelantしていません。しかし、あなたが問題を理解していただければ幸いです – nilesh1212

答えて

0

はい、あなたが使用しているスパークのバージョンに応じ

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

OR

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

のように異なる区切りで読み込むことができます。

文字列中の区切り文字については、区切り文字 '、'で読み込む前にエスケープするか、別の区切り文字を使用する必要があります。

関連する問題