spark sbt程序尝试从本地文件系统而不是intellij项目中的hdfs进行读取

wgx48brx  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(342)

我已经安装了hadoop(hadoop-2.7.2.tar.gz)和spark(spark-1.6.0-bin-without-hadoop.tgz)。两者都配置正确,可以一起工作。
我能够按照这个实践教程的scala版本来阅读存储在计算机上的文件 hdfs 并应用als算法给出建议。
但是,当我尝试在intellij ide中执行相同操作时,出现以下错误:

Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/data/movielens/medium

我想我在intellij中丢失了一些vm参数或其他配置,但我不知道它是什么。
有人能给我解释一下这种行为吗?我该怎么解决呢?

bybem2ql

bybem2ql1#

假设您使用的是基于linux的操作系统,则可能需要提供本地文件系统中安装数据目录的位置的完整路径。例如

val movieLensHomeDir = "file:///Users/user/training-downloads/data/movielens/medium"
sc.textFile(movieLensHomeDir, "ratings.dat")

将此与hdfs进行比较,在hdfs中,您可能能够给出hdfs中的路径,而不是本地文件系统。

val movieLensHomeDir = "/data/movielens/medium"
sc.textFile(movieLensHomeDir, "ratings.dat")

或者如spark文档所示:
要从spark访问hadoop数据,只需使用hdfs://url(通常是hdfs://:9000/path,但您可以在hadoop namenode的web ui上找到正确的url)。

val movieLensHomeDir = "hdfs://<namenode>:9000/data/movielens/medium"
sc.textFile(movieLensHomeDir, "ratings.dat")
vzgqcmou

vzgqcmou2#

试试这个

//this is your input path
val text_file = sc.textFile("hdfs://...")
//or 
val text_file = sc.textFile("your local path") 

//mapping and reduscing 
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)

//output path
counts.saveAsTextFile("hdfs://...") or
counts.saveAsTextFile("your local file system path")

相关问题