2016-04-12 7 views
15

Bir CSV içinde Spark DataFrame olarak okuyorum ve üzerinde makine öğrenme işlemleri gerçekleştiriyorum. Bir Python serileştirme EOFError almaya devam ediyorum - herhangi bir fikri neden? Bir bellek sorunu olabileceğini düşündüm - yani kullanılabilir RAM'i aşan dosya - ancak DataFrame'in boyutunu büyük ölçüde azaltmak EOF hatasını engellemedi.PySpark serileştirme EOFError

Oyuncak kodu ve hatanın altında. tek bir düğümde spark-submit yukarıda kod çalıştırma

#set spark context 
conf = SparkConf().setMaster("local").setAppName("MyApp") 
sc = SparkContext(conf = conf) 
sqlContext = SQLContext(sc) 

#read in 500mb csv as DataFrame 
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', 
    inferschema='true').load('myfile.csv') 

#get dataframe into machine learning format 
r_formula = RFormula(formula = "outcome ~ .") 
mldf = r_formula.fit(df).transform(df) 

#fit random forest model 
rf = RandomForestClassifier(numTrees = 3, maxDepth = 2) 
model = rf.fit(mldf) 
result = model.transform(mldf).head() 

sürekli DataFrame boyutu (önceki modelin yerleştirilmesi için azaltılmış olsa bile, aşağıdaki hata atar, örneğin tinydf = df.sample(False, 0.00001):

Traceback (most recent call last): 
    File "/home/hduser/spark1.6/python/lib/pyspark.zip/pyspark/daemon.py", line 157, 
    in manager 
    File "/home/hduser/spark1.6/python/lib/pyspark.zip/pyspark/daemon.py", line 61, 
    in worker 
    File "/home/hduser/spark1.6/python/lib/pyspark.zip/pyspark/worker.py", line 136, 
    in main if read_int(infile) == SpecialLengths.END_OF_STREAM: 
    File "/home/hduser/spark1.6/python/lib/pyspark.zip/pyspark/serializers.py", line 545, 
    in read_int 
    raise EOFError 
    EOFError 
+1

Spark 2.1.0 (yeni piyasaya sürülmüş) bir şans verebilir misiniz? –

+0

Ayrıca başka bir DataFrame (manuel) olarak "df" oluşturabilir ve baştan başlayabilir misiniz? –

+1

Bazı hizmetlerde okumaya çalıştığınız csv dosyasını koyabilir misiniz? böylece bir göz atabiliriz. –

cevap

0

hata pySpark sayıOku işlevinde gerçekleşmesi görünür Kod olan spark site dan şöyle:.

def read_int(stream): 
length = stream.read(4) 
if not length: 
    raise EOFError 
return struct.unpack("!i", length)[0] 

Bu woul dere akışından 4 bayt okurken, 0 bayt okunduğunda, EOF hatası oluştuğunu gösterir. Python dokümanları here'dur.