如何将具有大量列的CSV文件导入Apache Spark 2.0?

6
我遇到了一个问题,需要将多个小 csv 文件导入包含 250,000 列 float64 的 Apache Spark 2.0 中。我正在使用 Google Dataproc 集群。有几列是字符串,但我只关心其中的一列作为类标签。
在 pyspark 中运行以下代码:
csvdata = spark.read.csv("gs://[bucket]/csv/*.csv", header=True,mode="DROPMALFORMED")

我遇到了一个问题:

文件 "/usr/lib/spark/python/lib/py4j-0.10.1-src.zip/py4j/protocol.py", 第 312 行, 发生错误:py4j.protocol.Py4JJavaError: 调用 o53.csv 出错: com.univocity.parsers.common.TextParsingException: java.lang.ArrayIndexOutOfBoundsException - 20480 提示: 处理的列数可能超过了 20480 列的限制。使用 settings.setMaxColumns(int) 定义输入最大列数 确保你的配置正确,分隔符、引号和转义序列与你尝试解析的输入格式匹配 解析器配置:CsvParserSettings:

  1. 我应该在哪里/如何为解析器设置最大列数,以便能够使用机器学习数据。
  2. 有没有更好的方法来将数据摄入 Apache mllib?

这个问题提到了为 dataframe 定义一个类来使用,但是是否可能定义一个如此庞大的类而不必创建 21 万个条目?

1个回答

17
使用option:
spark.read.option("maxColumns", n).csv(...)

其中n表示列数。


当我运行时,出现了这个错误:在HIVE_HOME或HIVE_CONF_DIR中找不到ivysettings.xml文件,将使用/etc/hive/conf.dist/ivysettings.xml。数据已经被导入,但是根据df.printSchema(),float64被检测为字符串。 - mobcdi
警告与字符串类型无关。除非您推断(而您不应该这样做)或提供模式,否则它使用字符串。 - user6022341
是否可以轻松地将所有float64识别为mllib的特征? - mobcdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接