我使用Spark-scala应用程序,我用sbt构建项目,我的树状结构是:
projectFilms/src/main/scala/AppFilms
我在HDFS中有3个文件,这些目录是:hdfs/tmp/projetFilms/<my_3_Files>
,当我通过这个命令行“sbt run”运行我的代码时,它出现错误:
java.lang.IllegalArgumentException: java.net.UnknownHostException: tmp
和此:
[trace] Stack trace suppressed: run last compile:run for the full output.
ERROR Utils: uncaught error in thread SparkListenerBus, stopping SparkContext
java.lang.InterruptedException
这是我的代码:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd._
object appFilms {
val conf = new SparkConf().setAppName("system of recommandation").setMaster("local[*]")
val sc = new SparkContext(conf)
def main(args: Array[String]) {
val files = sc.wholeTextFiles("hdfs://tmp/ProjetFilm/*.dat")
//val nbfiles = files.count
println("Hello my application!")
sc.stop()
}
}
我无法从hdfs读取文件,但是当我写
时root@sandbox projectFilms# hadoop fs -cat /tmp/ProjetFilms/*
我如何从HDFS读取所有文件的内容,因为我知道我总是使用相同的命令工作。
请你能回答我!
答案 0 :(得分:1)
使用:
val files = sc.wholeTextFiles("hdfs:///tmp/ProjetFilm/*.dat")
hdfs://
之后还有一个附加/,是协议名称。您必须通过hdfs://协议转到/tmp/...
,这就是URL需要额外/的原因。如果没有这个,Spark就会尝试访问主机tmp
,而不是文件夹
答案 1 :(得分:1)
错误IllegalArgumentException: java.net.UnknownHostException: tmp
是因为wholeTextFiles
值将tmp
作为主机名。将值替换为hdfs:///tmp/ProjetFilm/*.dat