python - BigQuery - Apache Avro 库无法解析标头并出现以下错误:数据文件无效。魔法不匹配
问题描述
我第一次弄乱 avro 文件。
我得到了很多带有编码数据的 csv 文件,并且只是对应该去 BigQuery 的数据进行了 python 处理。最后,我得到了在 avsc 中收到的带有 csv 数据的模式节拍。到目前为止,一切都很好。
现在我知道我需要在 BigQuery 中创建将接收此数据的表。我只是尝试创建一个空白表并插入接收到的模式并且不能。我收到以下信息:“读取数据时出错,错误消息:Apache Avro 库无法解析标头并出现以下错误:无效数据文件。魔术不匹配:gs://xxx/xxx/test.avsc” . 我试图通过这个在线页面将 avsc 转换为 json:https ://json-schema-validator.herokuapp.com/avro.jsp但是没有成功。
这是流程路径吗?因为我可以在解码后生成记录,所以我知道架构不正确。所以我怀疑我是否做对了。
解决方案
您不能使用 avsc 文件创建表模式。您可以从CSV或AVRO(未压缩)加载数据并启用模式自动检测。此外,如果您的文件位于本地数据源上,请查看此内容。
由于您使用的是 python 和 CSV 文件,因此您可以尝试以下操作:
from google.cloud import bigquery
client = bigquery.Client()
filename = '/path/to/file.csv'
dataset_id = 'my_dataset'
table_id = 'my_table'
dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.skip_leading_rows = 1
job_config.autodetect = True
with open(filename, "rb") as source_file:
job = client.load_table_from_file(source_file, table_ref, job_config=job_config)
job.result() # Waits for table load to complete.
print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))
推荐阅读
- function - Haskell 中的函数 - 理解
- ios - Swift 结合递归重试
- json - ADO:通过 HTTP REST 请求将附件上传到 Azure DevOps
- java - 手动创建 LocalContainerEntityManagerFactoryBean 时不考虑 HibernateProperties
- firebird - 在 Firebird DB 和 Python 中插入重复行
- python - 使用 seaborn 获得绘图 - matplotlib
- javascript - 使用护照js res.redirection时何时将会话设置为false不起作用
- azure-web-app-service - 容器 Test1 没有响应端口:80 上的 HTTP ping,站点启动失败问题 - Azure Linux Web 服务
- r - 分割向量,按正则表达式分类
- tkinter - 为什么我的进度条没有出现在 tkinter