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

Use of spark pipe in a spark streaming application

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

我现在是怎么做的
在驱动程序 main class:

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 流应用程序中使用管道的最佳方式是什么?
你会怎么做,为什么?

它会很好地工作...就像 Hadoop Streaming for Spark - "wrong" 什么都没有,如果您受到可用性功能的限制,您没有太多选择。

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

顺便说一句,

transform(x => functionName(x))

相同
 transform(functionName)