【问题标题】:Error reading local CSV into spark dataset将本地 CSV 读入 spark 数据集时出错
【发布时间】:2017-09-03 04:20:04
【问题描述】:

我有一个本地 CSV“test.csv”,其中第一行是列名,接下来的行是数据。 我尝试在 Java 中像这样读取 CSV:

Dataset<Row> test_table = sparkSession()
    .sqlContext()
    .read()
    .format("com.databricks.spark.csv")
    .option("header", "true")
    .option("inferSchema", "true")
    .load("test.csv");

这是在这里建议的:
Read csv as Data Frame in spark 1.6

但我不断收到错误消息:

java.lang.NegativeArraySizeException
    at com.univocity.parsers.common.input.DefaultCharAppender.<init>(DefaultCharAppender.java:39)
    at com.univocity.parsers.csv.CsvParserSettings.newCharAppender(CsvParserSettings.java:82)
    at com.univocity.parsers.common.ParserOutput.<init>(ParserOutput.java:93)
    at com.univocity.parsers.common.AbstractParser.<init>(AbstractParser.java:74)
    at com.univocity.parsers.csv.CsvParser.<init>(CsvParser.java:59)
    at org.apache.spark.sql.execution.datasources.csv.CsvReader.<init>(CSVParser.scala:49)
    at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat.inferSchema(CSVFileFormat.scala:61)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184)
    at scala.Option.orElse(Option.scala:289)
    at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:183)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:135)

有什么问题,如何从 CSV 读取数据集?

【问题讨论】:

标签: apache-spark apache-spark-sql spark-dataframe


【解决方案1】:

univocity-parsers 库的作者在这里。发生这种情况是因为内部 spark 将最大值长度设置为-1(意味着没有限制)。这是在 2.2.0 及更高版本的univocity-parsers 中引入的。

只要确保这个库版本大于 2.2.0 就可以了,因为旧版本不支持将 maxCharsPerColumn 属性设置为 -1

如果您的类路径中有该库的多个版本,请摆脱旧版本。理想情况下,您希望更新到最新版本(当前为 2.5.4。)并仅使用该版本。它应该可以正常工作,因为我们确保对库所做的任何更改都是向后兼容的。

【讨论】:

    【解决方案2】:

    这主要是由于您使用的依赖项。 尝试使用其他类似

       --packages com.databricks:spark-csv_2.10:1.5.0 or spark-csv_2.10:1.4.0 
    

    它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 2018-12-10
      • 2017-04-15
      • 1970-01-01
      • 2018-11-29
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多