복붙노트

[SCALA] 어떻게 sc.textFile에서 로컬 파일을로드하는 대신 HDFS하기

SCALA

어떻게 sc.textFile에서 로컬 파일을로드하는 대신 HDFS하기

나는 위대한 스파크 튜토리얼을 다음 해요

README.md을로드하지만이 무엇인지 내가 뭘에 실패하는 00 년대 : 그래서 46m에서 시도하고있다 :

$ sudo docker run -i -t -h sandbox sequenceiq/spark:1.1.0 /etc/bootstrap.sh -bash
bash-4.1# cd /usr/local/spark-1.1.0-bin-hadoop2.4
bash-4.1# ls README.md
README.md
bash-4.1# ./bin/spark-shell
scala> val f = sc.textFile("README.md")
14/12/04 12:11:14 INFO storage.MemoryStore: ensureFreeSpace(164073) called with curMem=0, maxMem=278302556
14/12/04 12:11:14 INFO storage.MemoryStore: Block broadcast_0 stored as values in memory (estimated size 160.2 KB, free 265.3 MB)
f: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[1] at textFile at <console>:12
scala> val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)

나는 README.md 것을 어떻게로드 할 수 있습니다?

해결법

  1. ==============================

    1.( "파일에 대한 /// 경로 / 파일") sc.textFile를 지정 명시 적으로 봅니다. 하둡 환경이 설정되어있는 경우 오류가 발생합니다.

    ( "파일에 대한 /// 경로 / 파일") sc.textFile를 지정 명시 적으로 봅니다. 하둡 환경이 설정되어있는 경우 오류가 발생합니다.

    SparkContext.textFile 내부 스키마가없는 경우 다시 org.apache.hadoop.fs.getDefaultUri를 사용 org.apache.hadoop.mapred.FileInputFormat.getSplits를 호출합니다. 이 방법은 하둡의 conf의 "fs.defaultFS"매개 변수를 읽습니다. 당신이 HADOOP_CONF_DIR 환경 변수를 설정하면, 매개 변수는 일반적으로 "HDFS : // ..."로 설정; 그렇지 않으면 "파일 : //".

  2. ==============================

    2.gonbe의 대답은 우수합니다. /// = ~ /../../하지 $ SPARK_HOME :하지만 여전히 그 파일을 언급하고 싶다. 이 나 같은 newbs 약간의 시간을 절약 할 수 있기를 바랍니다.

    gonbe의 대답은 우수합니다. /// = ~ /../../하지 $ SPARK_HOME :하지만 여전히 그 파일을 언급하고 싶다. 이 나 같은 newbs 약간의 시간을 절약 할 수 있기를 바랍니다.

  3. ==============================

    3.스파크는 로컬 파일 시스템에서로드 파일을 지원하지만,이 파일이 클러스터의 모든 노드에서 동일한 경로에 사용할 수 있어야합니다.

    스파크는 로컬 파일 시스템에서로드 파일을 지원하지만,이 파일이 클러스터의 모든 노드에서 동일한 경로에 사용할 수 있어야합니다.

    일부 네트워크 파일 시스템은 NFS, AFS 및 MapR의 NFS 층과 같은 일반 파일 시스템으로 사용자에게 노출되어있다.

    데이터가 이러한 시스템 중 하나에 이미있는 경우에, 당신은 단지 파일을 지정하여 입력으로 사용할 수 있습니다 : // 경로를; 파일 시스템이 각 노드에서 동일한 경로에 장착 될 때 점화는 긴 처리한다. 모든 노드는 동일한 경로를 가질 필요가

     rdd = sc.textFile("file:///path/to/file")
    

    파일이 클러스터의 모든 노드에 있지 않으면, 당신은 스파크를 통하지 않고 드라이버에 로컬로로드 한 후 노동자에 내용을 배포하는 병렬화 호출 할 수 있습니다

    파일을 넣어주의 : // 전면 및 OS에 따라 "/"또는 "\"의 사용.

  4. ==============================

    4.당신은 ": /// 디렉토리 / 파일 파일"로 파일의 경로를 지정 단지 필요

    당신은 ": /// 디렉토리 / 파일 파일"로 파일의 경로를 지정 단지 필요

    예:

    val textFile = sc.textFile("file:///usr/local/spark/README.md")
    
  5. ==============================

    5.주의:

    주의:

    로컬에서 데이터를로드 할 때 로컬 모드에서 스파크를 실행하는 것이 있는지 확인하십시오 (sc.textFile를 ( "파일 : 파일에 대한 /// 경로 /")) 또는 당신에 의한이 같은 오류가 발생합니다 : java.io.FileNotFoundException : 파일을 파일 : /data/sparkjob/config2.properties가 존재하지 않습니다. 이 로컬 경로의 서로 다른 근로자에서 실행 집행이 파일을 찾을 수 없습니다 Becasuse.

  6. ==============================

    6.내 바탕 화면에 NewsArticle.txt라는 파일이 있습니다.

    내 바탕 화면에 NewsArticle.txt라는 파일이 있습니다.

    스파크, 나는 입력 :

    val textFile= sc.textFile(“file:///C:/Users/582767/Desktop/NewsArticle.txt”)
    

    나는 파일 경로에 / 문자 모든 \을 변경했습니다.

    그것이 작동하는지 테스트하기 위해, 나는 입력 :

    textFile.foreach(println)
    

    나는 윈도우 7을 실행하는거야 내가 하둡이 설치되어 있지 않습니다.

  7. ==============================

    7.이 불꽃 메일 링리스트로 논의하고이 메일을 참조하시기 바랍니다있다.

    이 불꽃 메일 링리스트로 논의하고이 메일을 참조하시기 바랍니다있다.

    당신은 하둡을 사용한다 FS 저것 집어 넣어 <을 localsrc> ... HDFS에 파일을 복사 :

    ${HADOOP_COMMON_HOME}/bin/hadoop fs -put /path/to/README.md README.md
    
  8. ==============================

    8.파일이 사용자의 스파크 마스터 노드에있는 경우 (예를 들어, AWS EMR을 사용하는 경우), 먼저 로컬 모드에서 스파크 쉘을 실행합니다.

    파일이 사용자의 스파크 마스터 노드에있는 경우 (예를 들어, AWS EMR을 사용하는 경우), 먼저 로컬 모드에서 스파크 쉘을 실행합니다.

    $ spark-shell --master=local
    scala> val df = spark.read.json("file:///usr/lib/spark/examples/src/main/resources/people.json")
    df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
    
    scala> df.show()
    +----+-------+
    | age|   name|
    +----+-------+
    |null|Michael|
    |  30|   Andy|
    |  19| Justin|
    +----+-------+
    

    또한, 먼저 로컬 파일 시스템에서 HDFS에 파일을 복사 할 수 있습니다 다음 기본 모드에서 스파크를 실행 (예를 들어, AWS EMR을 사용하는 경우에 YARN) 파일을 직접 읽을 수 있습니다.

    $ hdfs dfs -mkdir -p /hdfs/spark/examples
    $ hadoop fs -put /usr/lib/spark/examples/src/main/resources/people.json /hdfs/spark/examples
    $ hadoop fs -ls /hdfs/spark/examples
    Found 1 items
    -rw-r--r--   1 hadoop hadoop         73 2017-05-01 00:49 /hdfs/spark/examples/people.json
    
    $ spark-shell
    scala> val df = spark.read.json("/hdfs/spark/examples/people.json")
    df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
    
    scala> df.show()
    +----+-------+
    | age|   name|
    +----+-------+
    |null|Michael|
    |  30|   Andy|
    |  19| Justin|
    +----+-------+
    
  9. ==============================

    9.이것은 하둡은 또한 스파크와 하둡 모두 동일한 공통 디렉토리에 설치되어있는 일반적인 "하둡"사용자 홈 directory.Since 아래에 설치된 스파크 2.3 나에게 일어난 기본적으로 스파크는 HDFS와 같은 방식을 고려하고, 입력을 찾고 시작 HDFS에서 파일은 하둡의 핵심-site.xml 파일에 fs.defaultFS에 의해 지정된. 이러한 경우에서, 우리는 명시 적으로 파일과 체계를 지정해야합니다 : /// .

    이것은 하둡은 또한 스파크와 하둡 모두 동일한 공통 디렉토리에 설치되어있는 일반적인 "하둡"사용자 홈 directory.Since 아래에 설치된 스파크 2.3 나에게 일어난 기본적으로 스파크는 HDFS와 같은 방식을 고려하고, 입력을 찾고 시작 HDFS에서 파일은 하둡의 핵심-site.xml 파일에 fs.defaultFS에 의해 지정된. 이러한 경우에서, 우리는 명시 적으로 파일과 체계를 지정해야합니다 : /// .

  10. ==============================

    10.이것은 내가 Windows 클러스터에 푸른에서 호스팅되는 스파크 클러스터에지고 있다고이 오류에 대한 솔루션입니다 :

    이것은 내가 Windows 클러스터에 푸른에서 호스팅되는 스파크 클러스터에지고 있다고이 오류에 대한 솔루션입니다 :

    원시 HVAC.csv 파일을로드 기능을 사용하여 구문 분석

    data = sc.textFile("wasb:///HdiSamples/SensorSampleData/hvac/HVAC.csv")
    

    하둡은 푸른 블로그 저장 파일에 액세스 할 수 있도록하고 3 개의 슬래시가 실행중인 노드 컨테이너 폴더에 대한 상대 참조입니다 : 우리는 (///이 wasb)를 사용합니다.

    예를 들면 : 스파크 클러스터 대시 보드에서 파일 탐색기에서 파일의 경로 인 경우 :

    sflcc1 \ sflccspark1 \ HdiSamples \ SensorSampleData HVAC \

    sflcc1 : 그래서에 설명하는 경로는 다음과 같다 저장 계정의 이름입니다. sflccspark : 클러스터 노드의 이름입니다.

    그래서 우리는 상대 세 슬래시와 함께 현재 클러스터 노드 이름을 참조하십시오.

    도움이 되었기를 바랍니다.

  11. ==============================

    11.당신은 HDFS에서 파일을 읽으려고합니다. 시도 SparkConf에 경로를 설정

    당신은 HDFS에서 파일을 읽으려고합니다. 시도 SparkConf에 경로를 설정

     val conf = new SparkConf().setMaster("local[*]").setAppName("HDFSFileReader")
     conf.set("fs.defaultFS", "hdfs://hostname:9000")
    
  12. ==============================

    12.당신은 dataframes에 로컬 파일을 변환 할 sc.textFile (...)를 사용할 필요가 없습니다. 옵션 중 하나는 라인으로 로컬 파일 라인을 읽고 다음 스파크 데이터 집합으로 변환 할 수있다. 여기에 자바에서 Windows 시스템에 대한 예입니다 :

    당신은 dataframes에 로컬 파일을 변환 할 sc.textFile (...)를 사용할 필요가 없습니다. 옵션 중 하나는 라인으로 로컬 파일 라인을 읽고 다음 스파크 데이터 집합으로 변환 할 수있다. 여기에 자바에서 Windows 시스템에 대한 예입니다 :

    StructType schemata = DataTypes.createStructType(
                new StructField[]{
                        createStructField("COL1", StringType, false),
                        createStructField("COL2", StringType, false),
                        ...
                }
        );
    
    String separator = ";";
    String filePath = "C:\\work\\myProj\\myFile.csv";
    SparkContext sparkContext = new SparkContext(new SparkConf().setAppName("MyApp").setMaster("local"));
    JavaSparkContext jsc = new JavaSparkContext (sparkContext );
    SQLContext sqlContext = SQLContext.getOrCreate(sparkContext );
    
    List<String[]> result = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
        String line;
        while ((line = br.readLine()) != null) {
          String[] vals = line.split(separator);
          result.add(vals);
        }
     } catch (Exception ex) {
           System.out.println(ex.getMessage());
           throw new RuntimeException(ex);
      }
      JavaRDD<String[]> jRdd = jsc.parallelize(result);
      JavaRDD<Row> jRowRdd = jRdd .map(RowFactory::create);
      Dataset<Row> data = sqlContext.createDataFrame(jRowRdd, schemata);
    

    지금 당신은 당신의 코드에서 dataframe 데이터를 사용할 수 있습니다.

  13. ==============================

    13.나는 시도는 다음과 기본적으로 스파크 지역, HDFS와 AWS S3 경로에서 읽을 수 있습니다 .. 내 로컬 파일 시스템에서 작동

    나는 시도는 다음과 기본적으로 스파크 지역, HDFS와 AWS S3 경로에서 읽을 수 있습니다 .. 내 로컬 파일 시스템에서 작동

    listrdd=sc.textFile("file:////home/cloudera/Downloads/master-data/retail_db/products")
    
  14. ==============================

    14.시험

    시험

    val f = sc.textFile("./README.md")
    
  15. from https://stackoverflow.com/questions/27299923/how-to-load-local-file-in-sc-textfile-instead-of-hdfs by cc-by-sa and MIT license