2017-03-24 101 views
2

我有四個數據列的數據集。如何從Apache Spark(pyspark)中的數據集獲取某些列?

例:

a b c d 
1, 2, 3, 4 

...

使用pyspark,我怎麼能檢索a列中的數據和b只?我是新來的火花,並嘗試了很多東西,包括:

dataset = data_raw.filter(lambda line: line != dataset_header) \ 
.map(lambda line: line.split(", ", maxsplit=2)).take(1) 

但是,這似乎並沒有給我所需的目標。我想要的是有列ab並丟棄該數據集的其餘部分。任何幫助將非常感激。

回答

1

我不知道該代碼會做你期待什麼了它的工作。見documentationsplit一點點清晰。下面是一個簡單exapmle:

my_string = '1, 2, 3, 4' 
result = my_string.split(', ', maxsplit=2) 

print(result) 
['1', '2', '3, 4'] 

正如你可以看到你最終有三個要素,你各執只有在前兩種情況下「」。

這個小細節拋開你嘗試過:

dataset = data_raw.filter(lambda line: line != dataset_header) \ 
    .map(lambda line: line.split(', ')[:2]) 

編輯

在回答您的意見,我只是裝了火花RDD你的榜樣的數據和測試。以下是結果的圖片。

pyspark map example

EDIT2

看到你指出,你的數據在一個CSV文件,你可以只使用SparkSession.read.csv。一旦你的數據框你可以選擇你的列:

DF [「一」,「B」]秀(5)

將呈現前五行。

enter image description here

+0

嗨@Grr我剛剛試過你的建議,它只是打印出所有的數據。 – xn139

+0

@ xn139我剛剛上傳了我的測試圖像。如果您可以提供更多關於如何加載數據的詳細信息,請使用RDD或DF等,這樣可以更輕鬆地提供幫助。 – Grr

+0

@Grr嗨,我的數據是一個CSV文件 - 當我嘗試並行我的CSV文件,我得到這個:'類型錯誤:「RDD」對象不是iterable'我可以並行我的CSV文件並執行上述操作? – xn139

1

你有沒有嘗試Select方法選擇只有兩個欄..

dataset.select('a','b').show() 

我認爲你應該使用CSV閱讀器旅遊數據集。

sc.textFile("file.csv") \ 
.map(lambda line: line.split(",")) \ 
.filter(lambda line: len(line)<=1) \ 
.collect() 
相關問題