[HADOOP] apache spark - 파일이 존재하는지 확인
HADOOPapache spark - 파일이 존재하는지 확인
나는 불꽃이 생기고 새로운 질문이 있습니다. 첫 번째 단계에서 SUCCESS.txt 파일을 HDFS의 위치에 쓰는 두 단계 프로세스가 있습니다. 스파크 작업 인 두 번째 단계는 데이터 처리를 시작하기 전에 SUCCESS.txt 파일이 있는지 확인해야합니다.
스파크 API를 검사하고 파일이 있는지 확인하는 방법을 찾지 못했습니다. 어떤 아이디어가 이것을 처리하는 방법?
내가 찾은 유일한 방법은 sc.textFile (hdfs : ///SUCCESS.txt) .count ()로 파일이 존재하지 않을 때 예외를 throw합니다. 그 예외를 잡아 내 프로그램을 그에 맞게 작성해야합니다. 나는이 접근법을 정말로 좋아하지 않았다. 더 나은 대안을 찾고 있습니다.
해결법
-
==============================
1.HDFS에있는 파일의 경우, 다음을 수행하는 hadoop 방식을 사용할 수 있습니다.
HDFS에있는 파일의 경우, 다음을 수행하는 hadoop 방식을 사용할 수 있습니다.
val conf = sc.hadoopConfiguration val fs = org.apache.hadoop.fs.FileSystem.get(conf) val exists = fs.exists(new org.apache.hadoop.fs.Path("/path/on/hdfs/to/SUCCESS.txt"))
-
==============================
2.전통적인 hadoop 파일 검사에서 파일 존재 여부를 내부적으로 검사하는 기능을 통해이를 호출하는 가장 좋은 방법이라고 할 수 있습니다.
전통적인 hadoop 파일 검사에서 파일 존재 여부를 내부적으로 검사하는 기능을 통해이를 호출하는 가장 좋은 방법이라고 할 수 있습니다.
object OutputDirCheck { def dirExists(hdfsDirectory: String): Boolean = { val hadoopConf = new org.apache.hadoop.conf.Configuration() val fs = org.apache.hadoop.fs.FileSystem.get(hadoopConf) val exists = fs.exists(new org.apache.hadoop.fs.Path(hdfsDirectory)) return exists } }
-
==============================
3.Pyspark의 경우 다음과 같은 방법을 사용하여 하위 프로세스를 호출하지 않고도이 작업을 수행 할 수 있습니다.
Pyspark의 경우 다음과 같은 방법을 사용하여 하위 프로세스를 호출하지 않고도이 작업을 수행 할 수 있습니다.
fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration()) fs.exists(sc._jvm.org.apache.hadoop.fs.Path("path/to/SUCCESS.txt"))
-
==============================
4.자바 코더의 경우;
자바 코더의 경우;
SparkConf sparkConf = new SparkConf().setAppName("myClassname"); SparkContext sparky = new SparkContext(sparkConf); JavaSparkContext context = new JavaSparkContext(sparky); FileSystem hdfs = org.apache.hadoop.fs.FileSystem.get(context.hadoopConfiguration()); Path path = new Path(sparkConf.get(path_to_File)); if (!hdfs.exists(path)) { //Path does not exist. } else{ //Path exist. }
-
==============================
5.pyspark python 사용자 :
pyspark python 사용자 :
파이썬이나 pyspark로는 아무 것도 찾지 못했습니다. 그래서 우리는 파이썬 코드에서 hdfs 명령을 실행할 필요가 있습니다. 이것은 나를 위해 일했다.
hdfs 명령으로 폴더가 있는지 확인합니다 : 참이면 0을 반환합니다.
hdfs dfs -test -d /folder-path
파일이 존재 하는지를 얻는 hdfs 명령 : 참이면 0을 반환합니다.
hdfs dfs -test -d /folder-path
파이썬 코드에서 이것을 넣으려면 아래 코드 줄을 따라 갔다.
import subprocess def run_cmd(args_list): proc = subprocess.Popen(args_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc.communicate() return proc.returncode cmd = ['hdfs', 'dfs', '-test', '-d', "/folder-path"] code = run_cmd(cmd) if code == 0: print('folder exist') print(code)
폴더가 있으면 출력 :
폴더가 있음 0
-
==============================
6.PySpark의 경우 :
PySpark의 경우 :
from py4j.protocol import Py4JJavaError def path_exist(path): try: rdd = sc.textFile(path) rdd.take(1) return True except Py4JJavaError as e: return False
from https://stackoverflow.com/questions/30405728/apache-spark-check-if-file-exists by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] YARN에서 스파크의 로그는 어디에 있습니까? (0) | 2019.06.01 |
---|---|
[HADOOP] Hadoop Map에서 목록 출력 Custom writable을 사용하여 작업 줄이기 (0) | 2019.06.01 |
[HADOOP] HDFS Java의 기존 파일에 데이터 추가 (0) | 2019.06.01 |
[HADOOP] hadoop hdfs에있는 디렉토리와 서브 디렉토리에있는 모든 파일을 나열하는 법 (0) | 2019.06.01 |
[HADOOP] Spark를 사용하여 HDFS에서 파일을 읽을 수 없습니다. (0) | 2019.06.01 |