csv - 使用 Spark 从 S3 加载嵌套的 csv 文件

标签 csv hadoop apache-spark amazon-s3 spark-csv

我尝试加载 s3 中的数百个 gzip 压缩 csv 文件。目录结构类似于以下内容:

bucket
-- level1
---- level2.1
-------- level3.1
------------ many files 
-------- level3.2
------------ many files 
---- level2.2
-------- level3.1
------------ many files 
-------- level3.2
------------ many files 

可能有多个level2、level3目录,每个目录下都有很多文件。过去我使用 .textFile 加载数据并使用通配符传递路径,例如:

s3a://bucketname/level1/**

它可以很好地加载所有子路径下的所有文件。我现在尝试在 spark 2 中使用 csv 加载机制,但我不断收到以下错误:

java.lang.IllegalArgumentException: Can not create a Path from an empty string
at org.apache.hadoop.fs.Path.checkPathArg(Path.java:126)
at org.apache.hadoop.fs.Path.<init>(Path.java:134)
at org.apache.hadoop.util.StringUtils.stringToPath(StringUtils.java:245)
at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:377)
at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$30.apply(SparkContext.scala:1014)
at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$30.apply(SparkContext.scala:1014)
at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:179)
at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:179)
at scala.Option.foreach(Option.scala:257)

我试过使用以下路径:

  1. s3a://bucketname/level1/**
  2. s3a://bucketname/level1/
  3. s3a://bucketname/level1

所有结果都相同。如果我使用 s3a://bucketname/level1/level2.1/level3.1/ 可以加载该目录下的所有文件,但如果我尝试使用更高级别的目录,它会失败。

我要加载的代码是:

   Dataset<Row> csv = sparkSession.read()
            .option("delimiter", parseSettings.getDelimiter().toString())
            .option("quote", parseSettings.getQuote())
            .csv(path);

我虽然使用的 csv 加载会激发正常的文件解析策略,但行为似乎与使用 textFile 不同,有没有办法实现加载所有 csv 格式的文件?

谢谢,
弥敦道

最佳答案

听起来很可疑。

这意味着:在 issue.apache.org 中搜索错误消息和堆栈跟踪。 FWIW,它可能是SPARK-15473 .如果它存在且尚未存在,请将其添加到您的堆栈中;如果没有,请添加新内容。

首先:将其与 s3 输入隔离;尝试使用 file://URL 复制它。这将有助于将责任指向正确的代码段。

另外,变通时间。 databricks CSV 阅读器仍然有效

关于csv - 使用 Spark 从 S3 加载嵌套的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941827/

相关文章:

hadoop - Hadoop Yarn-如何请求固定数量的容器

scala - 如何在 Spark Streaming Scala 中对 HBase 进行单元测试

hadoop - 如何从命令行以人类可读的格式查找 yarn 应用统计信息

scala - 如何使用键将值映射到Spark DataFrame中的列

python sklearn : Numpy Conversion Error during scaling

excel - 如何在 Excel 2013 中正确显示 .csv 文件?

linux - Unoconv 将 excel 转换为 csv,分号不带引号

c - 读取 .csv 文件时遇到困难

scala - Hive UDF 在 Scala 中处理整数数组

Hadoop 客户端和集群分离