Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >谷歌数据流作业在writeToBiqquery步骤失败:'list‘对象和'str’对象没有属性‘’items‘

谷歌数据流作业在writeToBiqquery步骤失败:'list‘对象和'str’对象没有属性‘’items‘
EN

Stack Overflow用户
提问于 2019-11-12 18:04:33
回答 1查看 700关注 0票数 3

我有一个光束管道在用数据流流道运行。它接受XML并输出JSON,然后将其存储在Bigquery表中。早些时候,我使用beam管道将换行符分隔的JSON写入GCS bucket,并从该文件创建一个BQ表,而无需对其进行任何更改(使用bigquery控制台)。作业成功运行,数据导入到BQ中,没有任何问题。

现在我已经修改了管道,以便将输出的JSON行直接写入BQ表。我正在使用apache的beam.io.WriteToBigQuery函数。集合是json对象,其中每一行都包含BQ的一个单独的对象(行)。

下面是进入WriteToBigQuery的示例输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"order_no": "1111", "order_gross_price": "74.66", "order_tax": "0.00", "order_date": "2015-10-03T23:58:15.000Z", "shipping_net_price": "5.00", "merch_net_price": "69.66", "browser_id": "Mozilla"}
{"order_no": "2222", "order_gross_price": "27.82", "order_tax": "2.12", "order_date": "2015-10-04T00:04:20.000Z", "shipping_net_price": "5.00", "merch_net_price": "20.70", "browser_id": "Mozilla"}

我的部分代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from apache_beam.io.gcp import bigquery
from apache_beam.io.gcp.bigquery_tools import parse_table_schema_from_json

def run(argv = None):

    options = PipelineOptions()
    google_cloud_options = options.view_as(GoogleCloudOptions)  
    google_cloud_options.project = 'project_name'
    google_cloud_options.job_name = 'jobid'
    google_cloud_options.staging_location = 'gs://bucket/staging'
    google_cloud_options.temp_location = 'gs://bucket/temp'
    options.view_as(StandardOptions).runner = 'DataflowRunner'


    p = beam.Pipeline(options=options)

    table_spec = 'project:dataset.table'

    data = (p
        | 'Create' >> beam.Create([input_file_path])
        | 'GetXML' >> beam.ParDo(ReadGCSfile())
        #| 'Convert2JSON' >> beam.ParDo(converttojson())
        | 'COvert2json' >> beam.Map(lambda orders: json.dumps(orders))
        #| beam.Map(print_row)
        )


    project_id = "project1"
    dataset_id = 'dataset'
    table_id = 'table'
    table_schema = ('browser_id:STRING, merch_net_price:FLOAT, order_no:INTEGER, order_tax:FLOAT, shipping_net_price:FLOAT, order_gross_price:FLOAT, order_date:TIMESTAMP')

    data| 'write' >> beam.io.WriteToBigQuery(table = table_id,dataset=dataset_id,project=project_id,schema=table_schema,
                    create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
                    write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND
                    )

    p.run()

运行此管道时出现的错误如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AttributeError: 'list' object has no attribute 'items' [while running 'write/StreamInsertRows/ParDo(BigQueryWriteFn)']

我认为这个错误是由于上一步的返回类型造成的,或者是与执行约束和批量加载到BigQuery有关。我想在mycase中进行批量加载。我试着使用Apache BEam documentation-Writing to a bigquery table给出的insert pipeline示例来说明管道工作。其中的数据格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
quotes = p | beam.Create([
    {'source': 'Mahatma Gandhi', 'quote': 'My life is my message.'},
    {'source': 'Yoda', 'quote': "Do, or do not. There is no 'try'."},
])

如何修改我的管道,以便将我的示例中的字符串类型数据写入bigquery表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 17:41:21

如果有人遇到同样的问题,就把它贴在这里。这是我忽略的一个非常微小的细节。beam.io.WriteToBigquery()接受字典作为输入。在接收器部分之前,我的pcollection返回单个元素或字符串的列表(取决于我尝试过的一些版本)。我刚刚在管道中添加了另一个步骤,使用json.loads将json字符串转换为python字典,然后将行成功加载到BQ中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58824297

复制
相关文章
Arduino如何同时使用多个串口
如果想要给Arduino UNO R3同时接上WiFi模块和蓝牙模块时,但是Arduino的串口只有一个,怎样才能让Arduino同时使用多个串口呢?
小雨coding
2020/06/09
4.7K0
Arduino如何同时使用多个串口
macos如何同时使用登陆多个微信
macOS 如何双开微信 创建一WeChat.command 后缀的文件并填入一下内容 nohup /Applications/WeChat.app/Contents/MacOS/WeChat 记得添加执行权限 sudo chmod +x WeChat.command 想打开第二个微信的时候双击这个文件就好了
开水泡饭
2022/12/26
5.3K0
PythonWebServer如何同时处理多个请求
源于知乎上一个问题:https://www.zhihu.com/question/56472691/answer/293292349
the5fire
2019/03/01
1.9K0
(八)使用 $patch 同时修改多个状态
一、使用 $patch 同时修改多个状态 store.js import { ref, computed } from 'vue' import { defineStore } from 'pinia' export const useNoteStore = defineStore('note', () => { const noteList = ref([ { title: '标题1', desc: '详情内容1'
老怪兽
2023/02/22
6170
Spring同一接口有多个实现类,如何注入
最近写了前台一个管理模块,后来也是我来写,采用四层架构,在定义接口时,基本是一个接口对应一个实现类,使用@Autowired注解,但我想如果有多个实现类,如何注解,来梳理一下
kiki.
2022/09/29
2.6K0
[SEO知识讲解] 如何同时优化多个关键词
这里所说的内容主体是小型企业网站。很多seoer的初衷都是想同时优化多个关键词,而不仅仅是单独的目标关键词排名。
AlexTao
2019/12/13
8920
windows如何安装多个版本mysql,如何同时启动
ini文件里面 端口也要改为不一样,比如改为3307 以管理员身份打开cmd命令窗口,将目录切换到MySQL的安装目录的bin目录下 进入mysql的bin目录后执行
一写代码就开心
2022/06/12
4K1
windows如何安装多个版本mysql,如何同时启动
Cadence 16.6 Allegro如何同时对齐多个封装?
1)Allegro中选择Setup -> Application Mode -> Placement Edit
黑马Amos
2023/03/21
1.2K0
Cadence 16.6 Allegro如何同时对齐多个封装?
[译] 同时使用多个相机流 — Android 相机介绍
这篇文章是当前关于 Android 相机介绍中最新的一篇,我们之前介绍过相机阵列和相机会话和请求。
Android 开发者
2019/03/14
2.5K0
[译] 同时使用多个相机流 — Android 相机介绍
Map按单个或多个Value排序,当Value相同时按Key排序
Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。
向着百万年薪努力的小赵
2023/01/10
2.5K0
replaceAll()如何同时替换多个不同的字符串(或多个符号)
正好我遇到过这个情况,就跟她分享了一下心得,解决问题后的她开心的像刚充完气儿一样。
陈哈哈
2020/07/03
5.7K0
使用git将code同时提交多个远程仓
注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
宋天伦
2023/10/18
3370
nginx重写url】之 当项目有多个入口文件时
但当我们的php项目有多个入口文件时,(假如有index.php, admin.php, app.php, api.php 四个入口文件),在不处理的状态下,url会呈现出这般景象:
PM吃瓜
2019/08/13
1.8K0
同时遍历多个数组
python同时遍历两个或更多的序列,可以使用 zip() 组合: questions=['name', 'question','favorite color'] answers=['lancelot
程序员不务正业
2018/06/14
1.2K0
wriesharek同时监听多个端口
之前的文章《wireshark解析自定义的protobuf协议》 ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢?
meteoric
2018/11/20
3K0
vim同时编辑多个文件
# 1.如果在终端中开没有打开vim,可以: 横向分割显示: vim -o filename1 filename2 纵向分割显示: vim -O filename1 filename2 # 2.如果已经用vim打开了一个文件,想要在窗口中同时再打开另一个文件: 横向分割显示: :vs filename 纵向分割显示: :sp filename # 3.窗口切换 在所有窗口中循环移动 Ctrl+ww 如果finename不存在,则会新建该文件并打开。 # 4.关闭所有窗口 :wqa
summerking
2022/09/19
1.3K0
如何同时从多个文本文件读取数据
在很多时候,需要对多个文件进行同样的或者相似的处理。例如,你可能会从多个文件中选择数据子集,根据多个文件计算像总计和平均值这样的统计量。当文件数量增加时,手动处理文件的可能性会减小,出错的概率会增加。
TalkPython
2019/05/24
3.9K0
python编译同时存在多个编译环境终端如何切换
在使用python时候,我们经常会建立多个系统路径。主要是因为存在某一些第三方库之间存在冲突,不能够共存;有时也是为了使用一个不太臃肿的编译环境,时而建立一个新的虚拟环境,有时也建立一个新的编译环境,那么这时候,需要相互切换呢?应该怎么办呢?
全栈程序员站长
2022/07/08
1.4K0
图像处理中C++如何同时返回多个值
1 . pair<T,T> 返回两个值 //返回两个值的情况 pair<vector<double>,int> R_R(Mat& img) { int n=img.rows; vector<double> a; unsigned int m=img.cols; unsigned int k=img.rows; for(unsigned int i=0;i<m;i++) { for(unsigned int j=0;j<k;j++)
用户9831583
2022/06/16
7820
如何查询同时包含多个指定标签的文章
下面问题来了:如何查询 tag_id 同时包含 1、2、3 的 article_id?此问题看似简单,实际上也非常简单,本来是一道送分题,但是很多人却做不出来!
LA0WAN9
2021/12/14
1.9K0
如何查询同时包含多个指定标签的文章

相似问题

当div的类有多个名称时,如何使用getElementsByClassName(<classname>).outerHTML="“隐藏<div>?

12

当类名相同时,单击事件不工作

428

当多个级别的标记名相同时,使用JavaScript解析XML

23

用getElementsByClassName更改多个类?

65

当文件名相同时,提供旧映像

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文