在火花流应用中使用火花管

时间:2018-03-01 10:09:48

标签: scala apache-spark spark-streaming couchbase yarn

设置场景
我有一个用scala编写的火花流应用程序 在这个应用程序中,我需要pipe数据到python脚本。

我现在怎么做
在驱动程序主类中:

ssc
   .couchbaseStream(from = FromBeginning, to = ToInfinity)
   .flatMap(...)
   .flatMap(...)
   .flatMap(...)
   .transform(x => functionName(x))
   .flatMap(...)
   .map(...)
   .saveToCouchbase(bucketName, StoreMode.UPSERT)

ssc.start()
ssc.awaitTermination()

inside functionName(上面的x是存储在变量rdd中的RDD类型):

val pipeRDD = rdd.pipe(scriptPath)

问题
我不确定这是否是一个很好的方法 我担心的是每个x执行python脚本会有很大的开销 但由于它是一个流媒体应用程序,我不知道如何以不同的方式做到这一点。

在Spark流应用程序中使用管道的最佳方法是什么? 你会怎么做?为什么?

1 个答案:

答案 0 :(得分:1)

它会正常工作......就像Hadoop Streaming for Spark一样 - 没有什么是“错误的”,如果你受可用性功能的限制,你没有太多选择。

唯一的缺点是scriptPath文件必须在所有执行程序中可用,或者脚本(及其依赖项)需要与Spark应用程序JAR文件一起通过{{1}发送到集群中的所有执行程序}或--files标志

顺便说一下,

--archives

相同
transform(x => functionName(x))