【发布时间】:2017-11-01 05:47:31
【问题描述】:
我需要使用 spark-sql 读取一个文件,该文件在当前目录中。
我使用此命令解压缩存储在 HDFS 上的文件列表。
val decompressCommand = Seq(laszippath, "-i", inputFileName , "-o", "out.las").!!
文件在当前worker节点目录下输出,我知道这是因为通过scala执行"ls -a"!!可以看到文件在那里。然后我尝试使用以下命令访问它:
val dataFrame = sqlContext.read.las("out.las")
我假设 sql 上下文会尝试在当前目录中查找文件,但事实并非如此。此外,它不会引发错误,而是会发出警告,指出找不到文件(因此 spark 继续运行)。
我尝试使用:sparkContext.addFile("out.las") 添加文件,然后使用:val location = SparkFiles.get("out.las") 访问该位置,但这也不起作用。
我什至运行了命令 val locationPt = "pwd"!!,然后运行了 val fullLocation = locationPt + "/out.las" 并尝试使用该值,但它也不起作用。
实际抛出的异常如下:
User class threw exception: org.apache.spark.sql.AnalysisException: cannot resolve 'x' given input columns: [];
org.apache.spark.sql.AnalysisException: cannot resolve 'x' given input columns: []
当我尝试从数据框中访问“x”列时会发生这种情况。我知道“X”列存在,因为我从 HDFS 下载了一些文件,在本地解压缩并运行了一些测试。
我需要一个一个解压文件,因为我有1.6TB的数据,所以我不能一次解压,以后再访问。
谁能告诉我如何访问输出到工作节点目录的文件?或者也许我应该以其他方式做这件事?
【问题讨论】:
-
什么是双感叹号?
-
引号内的命令作为外部系统命令执行。
标签: scala hadoop apache-spark apache-spark-sql spark-dataframe