2017-01-30 3 views
1

로드하려고하는 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) 

내가 시도를 :

  1. S3A : // bucketname/레벨 1/**
  2. S3A : // bucketname/레벨 1/
  3. 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 형식의 파일?

감사합니다,
나단

+0

동일한 문제 : "빈 문자열에서 경로를 만들 수 없습니다" –

답변

0

는 의심 벌레처럼 들린다.

의미 : issue.apache.org에서 오류 메시지와 스택 추적을 검색합니다. FWIW, SPARK-15473 일 수 있습니다. 거기에 아직 &이 없으면 스택에 추가하십시오. 그렇지 않으면 새로운 것을 추가하십시오.

먼저 : s3 입력에서 분리하십시오. file : // URL로 복제 해보십시오. 올바른 코드 조각에 대한 책임을 지적하는 데 도움이 될 것입니다.

또한 해결 방법 시간입니다. databricks CSV 판독기가 여전히 작동

+0

file : //을 사용하여 로컬로 내 로컬 파일 시스템에 대해 코드를 실행하면 올바르게 작동합니다. jira 항목을 살펴 보겠습니다. –