我正在尝试从我的hdfs中读取文件内容,因为我正在使用 Source.fromFile()。当我的文件在本地系统中时工作正常但在我尝试从HDFS读取文件时抛出错误。
object CheckFile{
def main(args:Array[String]) {
for (line <- Source.fromFile("/user/cloudera/xxxx/File").getLines()) {
println(line)
}
}
}
错误:
java.io.FileNotFoundException: hdfs:/quickstart.cloudera:8080/user/cloudera/xxxx/File (No such file or directory)
我搜索了但我无法找到任何解决方案。
请帮忙
答案 0 :(得分:4)
如果您使用Spark,则应使用SparkContext
加载文件。 Source.fromFile
使用本地文件系统。
假设您SparkContext
位于sc
,
val fromFile = sc.textFile("hdfs://path/to/file.txt")
应该做的伎俩。但是,您可能必须指定节点地址。
更新:
添加评论。您想要从hdfs读取一些数据并将其存储为Scala集合。这是不好的做法,因为文件可能包含数百万行,并且由于内存不足而会崩溃;您应该使用RDD而不是内置的Scala集合。不过,如果这是你想要的,你可以这样做:
val fromFile = sc.textFile("hdfs://path/to/file.txt").toLocalIterator.toArray
哪个会生成所需类型的本地集合(在这种情况下为Array
)。
答案 1 :(得分:1)
insertRow <- function(df, rowindex) {
if(rowindex<=nrow(df)){df[seq(rowindex+1,nrow(df)+1),] <- df[seq(rowindex,nrow(df)),]
df[rowindex,] <- rep(NA,ncol(df))
return(df)}
if(rowindex>=nrow(df)+1){df[nrow(df)+1,]<-rep(NA,ncol(df))
return(df)}
}
将结果作为字符串