设置场景
我有一个用 scala 编写的 Spark 流应用程序。
在这个应用程序中,我需要将数据传输到 python 脚本。
我现在
怎么做在驱动程序主类中:
ssc
.couchbaseStream(from = FromBeginning, to = ToInfinity)
.flatMap(...)
.flatMap(...)
.flatMap(...)
.transform(x => functionName(x))
.flatMap(...)
.map(...)
.saveToCouchbase(bucketName, StoreMode.UPSERT)
ssc.start()
ssc.awaitTermination()
内部函数名称(上面的x是存储在变量rdd中的RDD类型(:
val pipeRDD = rdd.pipe(scriptPath)
问题
我不确定这是否是一个好方法。
我担心的是,为每个 x 执行 python 脚本会产生很大的开销。
但是由于它是一个流媒体应用程序,我看不出我该如何以不同的方式做到这一点。
在 Spark 流应用程序中使用管道的最佳方式是什么?
你会怎么做,为什么?
正常工作...这就像Spark的Hadoop Streaming - 没有什么"错误",如果你受到可用性功能的限制,你没有太多选择。
唯一的缺点是scriptPath
文件必须在所有执行程序中可用,或者脚本(及其依赖项(需要通过 --files
或 --archives
标志与 Spark 应用程序 JAR 文件一起交付给群集中的所有执行程序
顺便一提
transform(x => functionName(x))
与
transform(functionName)