设置场景
我有一个用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流应用程序中使用管道的最佳方法是什么? 你会怎么做?为什么?
答案 0 :(得分:1)
它会正常工作......就像Hadoop Streaming for Spark一样 - 没有什么是“错误的”,如果你受可用性功能的限制,你没有太多选择。
唯一的缺点是scriptPath
文件必须在所有执行程序中可用,或者脚本(及其依赖项)需要与Spark应用程序JAR文件一起通过{{1}发送到集群中的所有执行程序}或--files
标志
顺便说一下,
--archives
与
相同transform(x => functionName(x))