繁体   English   中英

如何从 Apache Beam 管道中的 pandas.dataFrame 获取输入

[英]How to take input from pandas.dataFrame in Apache Beam Pipeline

我正在尝试从 pandas 数据帧获取输入到 apache 光束管道并将其写入 GCS。 在不使用数据流/apache 光束的情况下,我可以在 GCS 中写入数据帧数据。 但是现在数据流在图片中。

def database_to_gcs(self, type='full'):
    if type == 'full':
        with open(self.tablemetadata, 'r') as fr:
            next(fr)
            self.clear_directory()
            argv = [
                '--project={0}'.format(self.project_name),
                '--job_name=One',
                '--save_main_session',
                '--staging_location=gs://{0}/staging/'.format(self.bucket_name),
                '--temp_location=gs://{0}/staging/'.format(self.bucket_name),
                '--runner=DataflowRunner'
            ]
            p = beam.Pipeline(argv=sys.argv)
            for line in fr:
                table_name, primary_key = line.split(',')
                self.cur.execute("SELECT * FROM " + table_name)
                df = pd.DataFrame(list(self.cur))
                dictionary = df.to_dict('split')
                print(dictionary)
                input_dataframe = df
                output_path = 'gs://{0}/output/{1}/{2}/{3}'.format(self.bucket_name,
                                                                   table_name,
                                                                   str(datetime.now().date()),
                                                                   str(datetime.now()) + "_" + table_name + '.csv')
                (p
                  | 'ReadDataframe' >> beam.io.ReadFromText(input_dataframe)
                  | 'WriteToFile' >> beam.io.Write(output_path)
                  )
                p.run()

Beam 提供ParDo变换,您可以在其中编写对输入元素进行操作的任意 Python 代码。 所以可能考虑编写一个DoFn ,它从输入文件中读取文本行并生成数据帧。 您可以在同一个 ParDo 中处理这些数据帧,也可以将它们提供给您进行处理的辅助 ParDo。 我认为 Beam 目前没有任何用于处理 pandas 数据帧的实用程序转换,尽管这已被多次讨论。

对于阅读这个老问题的任何人,Beam 不再支持 python 2.x 但现在 apache_beam.dataframe.io 中支持DataFrame

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM