将 xml 转换为 json 以将文件处理为 Bigquery

2024-02-11

我想将 stackexchange 原始数据处理到 BigQuery 中,但首先数据使用 7z 压缩格式,因此我解压缩数据以将其移植为 gz 格式,但内部文件是 xml。所以我需要将文件从 xml 转换为 json。有任何想法吗?我使用 p7zip 解压缩并使用 xml2json 尝试移植 xml 文件,但不起作用。

<?xml version="1.0" encoding="utf-8"?> <comments> <row Id="1" PostId="1" Score="3" Text="We need to all post more questions. Last time, we kinda &quot;rushed&quot; to get a w hole bunch of people to sign up at the last minute (and pulled some funny stuff" CreationDate="2014-02-12T01:01:14.257" UserId="52" />..

我使用了 xml2json xml2json -t json2xml -o xxx.xml yyy.json

使用 xml-json 的其他测试 **David 建议

使用来自 stackoverflow.com-Users.7z 的文件 Users.xml(大小 895M),命令为:xml-json Users.xml row > Users.json

xml-json Users.xml row > Users.json /usr/local/lib/node_modules/xml-json/node_modules/xml-nodes/index.js:19 this.soFar += String(chunk)
RangeError: Invalid string length
at XmlNodes._transform (/usr/local/lib/node_modules/xml-json/node_modules/xml-nodes/index.js:19:15)
at XmlNodes.Transform._read (_stream_transform.js:183:22)
at XmlNodes.Transform._write (_stream_transform.js:167:12)
at doWrite (_stream_writable.js:265:12)
at writeOrBuffer (_stream_writable.js:252:5)
at XmlNodes.Writable.write (_stream_writable.js:197:11)
at Duplexify._write (/usr/local/lib/node_modules/xml-json/node_modules/pumpify/node_modules/duplexify/index.js:197:22)
at doWrite (/usr/local/lib/node_modules/xml-json/node_modules/pumpify/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:237:10)
at writeOrBuffer (/usr/local/lib/node_modules/xml-json/node_modules/pumpify/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:227:5)
at Writable.write (/usr/local/lib/node_modules/xml-json/node_modules/pumpify/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js:194:11)
at ReadStream.ondata (_stream_readable.js:539:20)
at ReadStream.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:162:16)
at ReadStream.Readable.push (_stream_readable.js:125:10)
at onread (fs.js:1581:12)
at Object.wrapper [as oncomplete] (fs.js:482:17)

David M Smith 的答案是正确的,转换为 CSV 也可以。

经过几次尝试(并编辑了我的答案,因为我在回答之前没有彻底测试),我设法使用一个小的 Python 脚本创建了一个正确的 json 文件,如下所示:

#!python
from __future__ import print_function
import sys
import fileinput
import xml
from xml.dom import minidom
import json

for line in fileinput.input():
        try:
                xmlDoc = minidom.parseString(line)
                print(json.dumps(dict(xmlDoc.childNodes[0].attributes.items())))
        except xml.parsers.expat.ExpatError:
                print("Unable to process line : ", line, file=sys.stderr)
        except KeyboardInterrupt:
                sys.exit(0)

然后您可能需要重新启动 shell 来更新路径(或任何其他方法)。

对于最大的文件,我之前需要将它们拆分,因为 BigQuery 接受最大 4GB 的文件。这是完整的流程:

7z x -so ../orig/stackoverflow.com-Posts.7z 2> /dev/null | ./xmltojson.py > PostHistory3.json
split -e -d -C3G --additional-suffix=.json Posts.json Postssplit
ls Postssplit*.json | xargs -ifile gzip file 
gsutil cp Postssplit*.json.gz gs://YOURBUCKET
bq --project_id=YOURPROJECT load --source_format=NEWLINE_DELIMITED_JSON YOURDATASET.YOURTABLE gs://YOURBUCKET/Postssplit01.json,gs://YOURBUCKET/Postssplit03.json,gs://YOURBUCKET/Postssplit04.json,#ETCETERA 'Id:INTEGER,PostTypeId:INTEGER,AcceptedAnswerId:INTEGER,ParentId:INTEGER,CreationDate:TIMESTAMP,Score:INTEGER,ViewCount:INTEGER,Body:STRING,OwnerUserId:INTEGER,OwnerDisplayName:STRING,LastEditorUserId:INTEGER,LastEditorDisplayName:STRING,LastEditDate:TIMESTAMP,LastActivityDate:TIMESTAMP,Title:STRING,Tags:STRING,AnswerCount:INTEGER,CommentCount:INTEGER,FavoriteCount:INTEGER,ClosedDate:TIMESTAMP,CommunityOwnedDate:TIMESTAMP'

The gsutil部分不是强制性的,但我更愿意将文件上传到云存储中,然后导入。这样,如果导入失败我可以重试。

如果 Google 团队的有人正在阅读,那么将其作为公共数据集就太好了:-)

请注意,这不适用于任何 XML,仅适用于格式类似于当前 Stack Exchange 导出格式的 XML。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 xml 转换为 json 以将文件处理为 Bigquery 的相关文章

随机推荐

  • 在带有 CLion 的 Windows 中使用 CMake (mingw) 在 C++ 中未定义的 Qt5 引用

    我在尝试着使用 CMake 学习 Qt5 http doc qt io qt 5 cmake manual html在新的CLion C C IDE https www jetbrains com clion 我对这些工具还比较陌生 所以
  • 如果没有 TLS 1.0,WCF .NET 4.0 将无法工作

    在我工作的公司中 我们有一个产品在 NET Framework 4 0 中使用 SSL 通过 net tcp 使用 WCF 在特定客户端中 出于安全原因 需要禁用 SSL 2 SSL 3 和 TLS 1 问题是如果没有 TLS 1 0 通信
  • 从 PHP 脚本运行 PHP 脚本而不阻塞

    我正在构建一个蜘蛛 它将遍历各个站点并对它们进行数据挖掘 由于我需要单独获取每个页面 这可能需要很长时间 可能 100 页 我已经将 set time limit 设置为每页 2 分钟 但 apache 似乎无论如何都会在 5 分钟后杀死脚
  • Firebase函数:支持跨函数的全局变量

    我想在 http firebase 函数中缓存最近的记录 比如最近 24 小时 在 http firebase 函数 例如 fetchLastXRecords 中 我在缓存 定义的全局变量来存储记录 中查找记录 如果找不到 则从数据库中获取
  • pandas KeyError,使用浮点数时找不到索引

    我遇到以下问题 import pandas as pd import numpy as np df pd DataFrame np random rand 401 index np linspace 0 1 401 print np lin
  • 通过VBA插入Excel公式

    作为另一个问题的延续 我试图解决通过 VBA 在宏上插入公式的问题 这是我的代码 Range F1 Select ActiveCell Formula IF C1 LPPD MIPRU IF C1 LPGR DCT IF OR C1 LPF
  • Grails 中具有一个域类的依赖下拉菜单

    因此 我有一个域类 它有很多字段 我在 GSP 中准备了五个下拉菜单 并且数据在任何下拉菜单的 onChange 上正确过滤 但存在问题 对于在下拉列表中选择的几组组合 我们在数据库中没有数据 并且这些组合不是固定的 所以 我在想是否有可能
  • 如何将 asp:SiteMapPath 的输出转换为列表?

    我对 NET 和 VB NET 都非常不熟悉 不太清楚如何做到这一点 假设我有这样的代码 div class breadcrumb div
  • WPF 在 InitializeComponent 期间获取 Control null 引用

    So my InitializeComponentWindow 构造函数中的方法调用通过 XML 运行并添加控件并将它们插入到事件中 因此 当其中一个控件的属性发生更改时 它会调用订阅该事件的方法 该方法引用尚未构建的控件 为什么这里会按这
  • 如何在c中绘制直方图

    如何在 c 中从 2 个数组绘制直方图 您可以用这个字符 来表示图表中的计数 这是一个可以打印的字符 printf c char 254u 考虑一些随机的float arr and hist保存计数的数组 Code Function gen
  • 越野车弹跳球

    我在处理中制作碰撞球草图时 遇到了一个奇怪的错误 尽管有从墙上弹起的条件 有些球粘在上面 我在这里找不到错误的根源 有人可以帮忙吗 我还意识到可能很少 很多 糟糕的编码实践 但我事先道歉 我在下面发布代码 1 主要 https pasteb
  • Webpack / ES6:如何导入样式表

    我看到像 bootstrap 这样的存储库开始在它们的中包含额外的标签package json 文件 例如 style 和 less https github com twbs bootstrap blob v4 0 0 alpha 2 p
  • 在文本区域“内部”加粗文本

    我有一个文本区域 myarea我正在其中输入文本 我已经输入了这段文字 这是一个句子 只有这个词 最终会被加粗 现在我的侧面有一个按钮 就像一个粗体按钮 我想选择想要加粗的字母 单击按钮 然后看到这些字母在文本区域内变成粗体 它与许多编辑器
  • UITableViewCell - 如何在重用之前重置内容

    有一个烦人的错误我无法修复 我有一个CustomCell 其中我有一个子视图 可以根据对象的值更改其颜色 UITableViewCell tableView UITableView tableView cellForRowAtIndexPa
  • 如何使用 jQuery 选择的插件重置表单?

    我有一堆select元素的形式为我正在使用 Jquery Chosen 插件 https github com harvesthq chosen 如何重置表格 以下不起作用
  • Three.js 图块具有使用平面几何的多个纹理

    所以我正在尝试构建一个由图块组成的基于 3D 的世界 我已经成功地使用平面几何和高度值等做到了这一点 但现在我已经到了我可能必须改变一切的地步 问题是我希望一个图块具有多个纹理 使用着色器 因为我想混合它们 我能够在全球范围内执行此操作 因
  • 获取任意变换的 MatrixTransform

    我在 WPF 堆栈中工作 我希望能够为任何 Transform 获取 MatrixTransform 根据链接here http msdn microsoft com en us library system windows media t
  • Swing 数据绑定框架

    几乎同样的问题被问过year ago https stackoverflow com questions 510655 jgoodies binding vs jsr 295 但是这方面已经有了一些新的发展 为 Swing 应用程序选择一个
  • 尝试获取 PDO 中非对象的属性

    首先 我知道这可能是一个重复的问题 但我做了一些搜索 例如这个问题 https stackoverflow com questions 5891911 trying to get property of non object in但我不明白
  • 将 xml 转换为 json 以将文件处理为 Bigquery

    我想将 stackexchange 原始数据处理到 BigQuery 中 但首先数据使用 7z 压缩格式 因此我解压缩数据以将其移植为 gz 格式 但内部文件是 xml 所以我需要将文件从 xml 转换为 json 有任何想法吗 我使用 p