2017-08-21 14 views
0

ファイルをダウンロードしましたが、これをhdfsのデータフレームとして書き込もうとしています。SparkContext間違った場所で分割を並列化する

import requests 
from pyspark import SparkContext, SparkConf 

conf = SparkConf().setAppName('Write Data').setMaster('local') 
sc = SparkContext(conf=conf) 

file = requests.get('https://data.nasa.gov/resource/y77d-th95.csv') 

data = sc.parallelize(file) 

私は私のファイルの内容を印刷するとき、私は次の出力を参照してください。

print(file.text) 
":@computed_region_cbhk_fwbd",":@computed_region_nnqa_25f4","fall","geolocation","geolocation_address","geolocation_city","geolocation_state","geolocation_zip","id","mass","name","nametype","recclass","reclat","reclong","year" 
,,"Fell","POINT (6.08333 50.775)",,,,,"1","21","Aachen","Valid","L5","50.775000","6.083330","1880-01-01T00:00:00.000" 
,,"Fell","POINT (10.23333 56.18333)",,,,,"2","720","Aarhus","Valid","H6","56.183330","10.233330","1951-01-01T00:00:00.000" 

をそして、それは私が見たい正確に何です。今、私は私が私の最初の印刷から期待していたように私は、最初の行を取得していないですなぜdata = sc.parallelize(file)

print(data.first()) 
":@computed_region_cbhk_fwbd",":@computed_region_nnqa_25f4","fall","geolocation","geolocation_address","geolocation_city","geolo 

を使用して作成された私のRDDからヘッダを取るしようとしていますか?途中で途中で止まり、私のヘッダーの他のコンポーネントが見えません。

答えて

1

Response.__iter__はフォーマットを認識していないため動作しません。ただiterates over fixed size chunksです。

本当にこの使用text.splitlinesのようにデータを読み込む必要がある場合

sc.parallelize(file.text.splitlines()) 

以上:

import csv 
import io 

sc.parallelize(csv.reader(io.StringIO(file.text))) 
+0

私の仕事は大変ありがとう! – SebastienPattyn

1

答えは非常に簡単です。 Pythonオブジェクトを並列化するには、Sparkにリストを提供する必要があります。この場合、あなたは応答を供給している。

>>> file = requests.get('https://data.nasa.gov/resource/y77d-th95.csv') 
>>> file 
<Response [200]> 

あなたがデータを抽出し、この自分自身を分割することにより、スパークを助ける場合は、スパークはそれを理解します:

import requests 
from pyspark import SparkContext, SparkConf 

conf = SparkConf().setAppName('Write Data').setMaster('local') 
sc = SparkContext(conf=conf) 

file = requests.get('https://data.nasa.gov/resource/y77d-th95.csv').text.split('\n') 

data = sc.parallelize(file) 
data.first() 
>>> u'":@computed_region_cbhk_fwbd",":@computed_region_nnqa_25f4","fall","geolocation","geolocation_address","geolocation_city","geolocation_state","geolocation_zip","id","mass","name","nametype","recclass","reclat","reclong","year"' 

あなたのようなファイルシステムを持っている場合Hadoop、hadoopは分割を行い、HDFSブロックを改行で分割するように配置します。

これが役に立ちます。

乾杯、フォクコ

関連する問題