Python 2.7 写入BigQuery时出现云数据流性能问题
我正在尝试使用云数据流(Beam Python SDK)将其读写到BigQuery 读写2000万条记录(约80Mbs)几乎需要30分钟 查看数据流DAG,我可以看到将每个CSV行转换为BQ行花费了大部分时间 下面是执行相同操作的代码段:Python 2.7 写入BigQuery时出现云数据流性能问题,python-2.7,google-cloud-platform,profiling,google-cloud-dataflow,apache-beam,Python 2.7,Google Cloud Platform,Profiling,Google Cloud Dataflow,Apache Beam,我正在尝试使用云数据流(Beam Python SDK)将其读写到BigQuery 读写2000万条记录(约80Mbs)几乎需要30分钟 查看数据流DAG,我可以看到将每个CSV行转换为BQ行花费了大部分时间 下面是执行相同操作的代码段: beam.Map(lambda s: data_ingestion.parse_record_string(s,data_ingestion.stg_schema_dict)) def parse_record_string(self, stri
beam.Map(lambda s: data_ingestion.parse_record_string(s,data_ingestion.stg_schema_dict))
def parse_record_string(self, string_input,schema_dict):
for idx,(x,key) in enumerate(zip(imm_input,schema_dict)):
key = key.strip()
datatype = schema_dict[key].strip()
if key == 'HASH_ID' and datatype != 'STRING':
hash_id = hash(''.join(imm_input[1:idx]))
row_dict[key] = hash_id
else:
if x:
x = x.decode('utf-8').strip()
row_dict[key] = x
else:
row_dict[key] = None
#row_dict[key] = ''
return row_dict
除了贴图变换,我还使用了ParDo和Flatmap。所有这些都产生了相同的结果
请建议任何可能的调整以减少时间
提前感谢当您查看代码时,您的代码是计算密集型的。对于每一条20米长的线路,您执行以下操作:
- for循环(每行有多少个元素?)
- 拉链和拉链
- 在循环中的每个元素上
- 执行2条带(在字符串上循环以删除空格)
- 切片上的连接(这是两个循环)->这种情况多久发生一次
- 另一种情况下的另一条
如果你懂Java,试试看。它的效率可能要高得多。当您查看代码时,它是计算密集型的。对于每一条20米长的线路,您执行以下操作:
- for循环(每行有多少个元素?)
- 拉链和拉链
- 在循环中的每个元素上
- 执行2条带(在字符串上循环以删除空格)
- 切片上的连接(这是两个循环)->这种情况多久发生一次
- 另一种情况下的另一条
如果你懂Java,试试看。它可能会更有效率。FlatMap和Map都有ParDo的支持。Beam在写入BQ时自动将Python dict转换为TableRow。FlatMap和Map都由ParDo支持。Beam在写入BQ时会自动将Python DICT转换为TableRow。完全同意,您可以验证包含内置转换的数据,这些转换可以从Google BigQuery表读取数据,也可以将数据写入Google BigQuery表。完全同意,您可以验证,其中包括可以从Google BigQuery表读取数据和将数据写入Google BigQuery表的内置转换。