Spark Pipe函数抛出没有这样的文件或目录

时间:2018-03-19 20:23:26

标签: scala apache-spark pipe

我正在REPL中的EMR主服务器上运行spark管道功能,以测试管道功能。我使用以下示例

https://stackoverflow.com/a/32978183/8876462
http://blog.madhukaraphatak.com/pipe-in-spark/
http://hadoop-makeitsimple.blogspot.com/2016/05/pipe-in-spark.html

这是我的代码::

import org.apache.spark._
val distScript = "/home/hadoop/PipeEx.sh"
val distScriptName = "PipeEx.sh"
sc.addFile(distScript)
val ipData = 
sc.parallelize(List("asd","xyz","zxcz","sdfsfd","Ssdfd","Sdfsf"))
val opData = ipData.pipe(SparkFiles.get(distScriptName))
opData.foreach(println)

我尝试了不同的东西,例如使文件可执行,放在/ usr / lib / spark / bin中的文件中,如另一篇文章中所建议的那样。我改变了distScript来说

"file:///home/hadoop/PipeEx.sh"

我总是在tmp/spark*/userFiles*位置没有这样的文件或目录。我试图从tmp位置访问并运行shell程序,它运行正常。 我的shell脚本与http://blog.madhukaraphatak.com/pipe-in-spark/

相同

这是log ::

的第一部分
[Stage 9:>                                                          (0 + 2) 
/ 2]18/03/19 19:58:22 WARN TaskSetManager: Lost task 1.0 in stage 9.0 (TID 
72, ip-172-31-42-11.ec2.internal, executor 9): java.io.IOException: Cannot 
run program "/mnt/tmp/spark-bdd582ec-a5ac-4bb1-874e-832cd5427b18/userFiles-
497f6051-6f49-4268-b9c5-a28c2ad5edc6/PipeEx.sh": error=2, No such file or 
directory

有人有任何想法吗?我使用Spark 2.2.1和scala 2.11.8

由于

1 个答案:

答案 0 :(得分:0)

一旦我删除了,我就能解决这个问题     SparkFiles.get(distScriptName) 命令。 所以我的最终代码看起来像这样

val distScript = "/home/hadoop/PipeEx.sh"
val distScriptName = "./PipeEx.sh"
sc.addFile(distScript)

val ipData = sc.parallelize(List("asd","xyz","zxcz","sdfsfd","Ssdfd","Sdfsf"))
val opData = ipData.pipe(distScriptName)
opData.collect().foreach(println)

我不太清楚为什么删除SparkFiles.get()解决了问题