在火花流应用程序中使用火花管
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)
布景
我有一个用 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)