2017-02-09 90 views
0

我在S3中有一個CSV文件,它有420行和54000列。我試圖在CSV加載到數據幀星火:PySpark sqlContext.read.load ArrayIndexOutofBounds錯誤

com.univocity.parsers.common.TextParsingException: java.lang.ArrayIndexOutOfBoundsException - 20480

有較小的CSV文件中沒有問題:

genoExp = sqlContext.read.load("/mnt/%s/RNA-Seq/GSE10846_Gene_Expression_Data.csv" %MOUNT_NAME, format='com.databricks.spark.csv', header='true', inferSchema = 'true') 

這將返回一個錯誤。

回答

1

20480是列數的默認限制,但它可以使用maxColumns選項增加:

import pandas as pd 
import numpy as np 
import tempfile 

np.random.seed(1) 

(pd 
    .DataFrame(np.random.randint(0, 100, (1, 30000))) 
    .to_csv(path, header=True, index=False)) 

df = spark.read.option("maxColumns", "54000").csv(path, header=True) 

df.columns[:4] 
['0', '1', '2', '3'] 
df.select(df.columns[:4]).show() 
+---+---+---+---+ 
| 0| 1| 2| 3| 
+---+---+---+---+ 
| 37| 12| 72| 9| 
+---+---+---+---+ 

在實踐中並沒有太大的意義使用Spark(特別是不支持投影下推的源的Spark SQL)適用於這樣的短而寬的數據。儘管如此,你可以使用更低級別的API做得更好。