1. ホーム
  2. scala

[解決済み] HDFSではなく、ローカルファイルをsc.textFileで読み込む方法

2022-09-18 12:31:27

質問

私は、偉大な スパークチュートリアル

で、46m:00sで README.md を読み込もうとしているのですが、これがうまくいきません。

$ 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 ?

どのように解決するのですか?

明示的に sc.textFile("file:///path to the file/") . Hadoop環境が設定されている場合、エラーが発生します。

SparkContext.textFileは内部で以下のように呼び出しています。 org.apache.hadoop.mapred.FileInputFormat.getSplits を呼び出しており、それが org.apache.hadoop.fs.getDefaultUri を使用します。このメソッドは、Hadoop conf の "fs.defaultFS" パラメータを読み取ります。環境変数 HADOOP_CONF_DIR を設定している場合、このパラメータは通常 "hdfs://..." その他の場合は "file://" として設定されています。