在Beam Python中使用已弃用的BigQuerySink而不是WriteToBigQuery,可以通过以下代码示例进行解决:
import apache_beam as beam
from apache_beam.io import WriteToBigQuery
# 定义一个自定义的PTransform,用于将数据写入BigQuery
class CustomWriteToBigQuery(beam.PTransform):
def __init__(self, table):
self.table = table
def expand(self, pcoll):
return (
pcoll
| "ConvertToDict" >> beam.Map(lambda element: element.to_dict())
| "WriteToBigQuery" >> WriteToBigQuery(table=self.table)
)
# 创建一个Pipeline
with beam.Pipeline() as pipeline:
# 从某个地方读取数据
data = pipeline | beam.Create([
{'name': 'John Doe', 'age': 25},
{'name': 'Jane Smith', 'age': 30},
{'name': 'Bob Johnson', 'age': 35}
])
# 使用自定义的WriteToBigQuery将数据写入BigQuery
data | CustomWriteToBigQuery(table='project-id:dataset.table')
在上面的代码示例中,我们定义了一个自定义的PTransform(CustomWriteToBigQuery),它将数据转换为字典并使用WriteToBigQuery将其写入BigQuery。然后,在Pipeline中我们使用这个自定义的PTransform来写入数据到BigQuery。
请确保将'project-id:dataset.table'
替换为你要写入数据的实际BigQuery表的位置。