怎样使用spark的pipe调用外部程序
Spark在RDD上提供pipe()方法。Spark的pipe()方法可以让我们使用任意一种语言实现Spark作业中的部分逻辑,只要它能读写Unix标准的流就行。通过pipe(),你可以将RDD中的各元素从标准输入流中以字符串形式读出,并对这些元素执行任何你需要的操作,然后把结果以字符串的形式写入标准输出------这个过程就是RDD的转化操作过程。有了pipe()这个管道我们就可以通过这个管道与R、C++、Python以及shell脚本等程序进行交互,使其能够进行更快的计算。
本博客只介绍spark通过pipe()与Python,shell进行交互,感兴趣的小伙伴可以尝试一下其他的。
第一种:pipe()与Python进行交互
1.首先写一个Python程序,在本地运行保证没问题。
import sys
for line in sys.stdin:
d=line.strip().split(',')
if len(d) !=2:
continue
label=d.pop(0)
hit_id=d.pop(0)
features=[]
features.append(("Item.id,%s" % label, 1))
features.append(("Item.id,%s" % hit_id,1))
print(features)
注意:要用stdin或者raw_input获取输入。
2.把Python程序写成脚本
#!/usr/bin/python
import sys
for line in sys.stdin:
d=line