我在这里运行Sentiment示例以进行张量流转换。 https://github.com/tensorflow/transform/blob/master/examples/sentiment_example.py
对于第78-98行中定义的fn ReadAndShuffleData(),是否可以通过类似的方式加载文件,但可以从HDFS而不是GCS加载文件?
我整天尝试了几种Beam API(beams-2.8.0),但失败了,我认为最有前途的就是使用beams.io.hadoopfilesystem。但是,此fn实际上产生了一个python文件对象,并且无法在束流水线中使用beams.io.ReadFromText()来读取。
我还正确传递了HadoopFileSystemPipelineOptions。任何人都可以告诉我解决该问题的方向,2/3行代码段或解决方法?非常感谢你!
p.s。 hadoop 2.7.7,波束2.8和数据已正确加载。
我想我可能在这里缺乏一些理论上的理解,任何参考文献将不胜感激!
答案 0 :(得分:1)
您可以使用apache_beam.Create
转换:
初始化签名:beam.Create(自身,值,reshuffle = True)
文档字符串:一种通过迭代器创建PCollection的转换。
import apache_beam as beam
from apache_beam.options.pipeline_options import HadoopFileSystemOptions
from apache_beam.io.hadoopfilesystem import HadoopFileSystem
HDFS_HOSTNAME = 'foo.hadoop.com'
HDFS_PORT = 50070
hdfs_client_options = HadoopFileSystemOptions(hdfs_host=HDFS_HOSTNAME, hdfs_port=HDFS_PORT, hdfs_user="foobar")
hdfs_client = HadoopFileSystem(hdfs_client_options)
input_file_hdfs = "hdfs://foo/bar.csv"
f = hdfs_client.open(input_file_hdfs)
p = beam.Pipeline(options=PipelineOptions())
lines = p | 'ReadMyFile' >> beam.Create(f)
res = lines | "WriteMyFile" >> beam.io.WriteToText("./bar", ".csv")
p.run()