2017-10-16 4 views
1

私はいくつかの列見出しとそれに対応する値がnullである1つのCSVを持っています。 nullという名前の列を削除するにはどうすればいいですか?Spark Data Frameから複数の列を削除する方法はありますか?

"name"|"age"|"city"|"null"|"null"|"null" 
"abcd"|"21" |"7yhj"|"null"|"null"|"null" 
"qazx"|"31" |"iuhy"|"null"|"null"|"null" 
"foob"|"51" |"barx"|"null"|"null"|"null" 

私はヘッダを持つすべての列を削除したい以下のようになりますnullように、出力データ・フレームがあります:

"name"|"age"|"city" 
"abcd"|"21" |"7yhj" 
"qazx"|"31" |"iuhy" 
"foob"|"51" |"barx" 

IスパークこのCSVを読み込む次のように サンプルCSVであります以下に示すように、スパークはヌル列に番号を付加:

"name"|"age"|"city"|"null4"|"null5"|"null6" 
"abcd"|"21" |"7yhj"|"null"|"null"|"null" 
"qazx"|"31" |"iuhy"|"null"|"null"|"null" 
"foob"|"51" |"barx"|"null"|"null"|"null" 

ソリューションが見つかりました

お返事ありがとうございました@MaxU。私の最終的な解決策がある:あなたがこのようにそれを行うことができます

val filePath = "C:\\Users\\shekhar\\spark-trials\\null_column_header_test.csv" 

val df = spark.read.format("csv") 
.option("inferSchema", "false") 
.option("header", "true") 
.option("delimiter", "|") 
.load(filePath) 

val q = df.columns.filterNot(c => c.startsWith("null")).map(a => df(a)) 
// df.columns.filterNot(c => c.startsWith("null")) this part removes column names which start with null and returns array of string. each element of array represents column name 

// .map(a => df(a)) converts elements of array into object of type Column 
df.select(q:_*).show 

答えて

3

IIUC:

df = df.drop(df.columns.filter(_.startsWith("null"))) 
+1

あなたが1つのブラケットが欠落しているので、それを閉じるのを忘れています。 – BlueTomato

+0

@BlueTomato、良いキャッチ - ありがとう!今修正されました – MaxU

関連する問題