로드하려고하는 s3에 수백 개의 gzip으로 압축 된 csv 파일이 있습니다. 디렉터리 구조는 다음과 유사합니다.S3에서 Spark로 중첩 된 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 디렉터리 및 여러 개의 파일이있을 수 있습니다. 잘 작동
s3a://bucketname/level1/**
는 모든 하위 경로 아래에있는 모든 파일을로드 : 과거에 나는 데이터 .textFile를 사용하고 같은 와일드 카드를 사용하여 경로를 통과로드되었다. 지금 스파크 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)
내가 시도를 :
- S3A : // bucketname/레벨 1/**
- S3A : // bucketname/레벨 1/
- S3A : // bucketname/레벨 1
같은 오류의 모든 결과. 만약 내가 s3a : //bucketname/level1/level2.1/level3.1/ 그 하나의 디렉토리 아래에있는 모든 파일을로드하는 데 사용하지만 더 높은 수준의 디렉토리를 사용하려고하면 실패합니다. 로드
내 코드는 다음과 같습니다 csv로 로딩 불꽃 일반 파일 해결 전략을 사용하지만 행동이 TEXTFILE를 사용하여 다른 것 같다 나는 비록
Dataset<Row> csv = sparkSession.read()
.option("delimiter", parseSettings.getDelimiter().toString())
.option("quote", parseSettings.getQuote())
.csv(path);
, 모두의 로딩을 달성하는 방법은 무엇입니까 csv 형식의 파일?
감사합니다,
나단
동일한 문제 : "빈 문자열에서 경로를 만들 수 없습니다" –