我在S3中有一个包含420行和54000列的CSV文件。我正在尝试将CSV加载到Spark DataFrame:
genoExp = sqlContext.read.load("/mnt/%s/RNA-Seq/GSE10846_Gene_Expression_Data.csv" %MOUNT_NAME, format='com.databricks.spark.csv', header='true', inferSchema = 'true')
这会返回错误:
com.univocity.parsers.common.TextParsingException:java.lang.ArrayIndexOutOfBoundsException - 20480
较小的CSV文件没有问题。
答案 0 :(得分: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做得更好。
答案 1 :(得分:-1)
我通过将编码从UTF-8更改为ISO-8859-1解决了这个问题