我有一个文件夹,我必须处理很多子目录。我决定找Linux的工具来查找所有文件,如如何输入stdin数据作为输入火花脚本
find . -name *.gz -exec zcat {} \;
现在我得给stdout数据火花脚本作为输入类似以下
find . -name *.gz -exec zcat {} \; | ./run_pyspark.py
是否有可能为火花读取标准输入数据(就像简单的python一样)。请给出一些例子或方法至少?
我有一个文件夹,我必须处理很多子目录。我决定找Linux的工具来查找所有文件,如如何输入stdin数据作为输入火花脚本
find . -name *.gz -exec zcat {} \;
现在我得给stdout数据火花脚本作为输入类似以下
find . -name *.gz -exec zcat {} \; | ./run_pyspark.py
是否有可能为火花读取标准输入数据(就像简单的python一样)。请给出一些例子或方法至少?
也许试试这个:
import subprocess
file_data=subprocess.call(['find', '.', '-name','*.gz',.....])
你可以使用一个技巧是通过管道过程通过你的论点。参考文档
pipe(命令,env = None,checkCode = False) 将由管道元素创建的RDD返回到派生外部进程。
>>> sc.parallelize(['1', '2', '', '3']).pipe('cat').collect()`
[u'1', u'2', u'', u'3']`
所以,你可以在你的脚本是这样的:
test = sc.parallelize([1])
data = test.pipe("find . -name *.gz -exec zcat {}")
然而,这是不是很有效。如果你想要的是能够读取你的目录中的所有的gzip文件,只需将路径传递到您的文件,如
data = sc.textFile("/path/to/files/*gz")
data.take(3) ## take a sample of records
就这么简单。也适用于bz2文件。
注意:这不适用于分布式环境。 –
我知道,但我必须在同一个系统上使用它(本地模式) – Shafiq