我在BigQuery上有数据集,它以Json字符串的形式开始生活.模式是<时间戳,String>,但详细信息作为Json字典隐藏在该字符串中,例如:
2022-01-01 10:11:12.123 UTC, {"DataType1":[46.2], "DataType2":[1002.3],....}
2022-01-01 10:12:12.123 UTC, {"DataType1":[96.1], "DataType2":[1004.6],....}作为Google运行的一部分,我需要在几十万张时间戳上提取十几个变量.
有效的方法是使用BigQuery并执行一些JSON_EXTRACT(Data,"$.DataTypeX") As DataTypeX命令,这样我就可以(通过一个中间的Py箭头文件)得到一个Pandas表,该表中充满了像[[46.2],[96.1],...]这样的列,然后我可以执行一个lambda表达式来最终到达[46.2, 96.1,...]。太棒了。但它是最快的吗?
我还尝试在BigQuery上做更多的工作,特别是对于每个变量do CAST(REGEXP_REPLACE(JSON_EXTRACT(Data,"$.DataTypeX"), '[\[\]]', "") AS FLOAT64) As DataTypeX
这让我直接进入Pandas的浮动栏46.2,96.1等等,这是很酷的(现在似乎更快-基准测试)。
因此,我的问题是:我看到Pyarrow也支持String上的regexp表达式。与在BigQuery中执行regexp相比,在中间Pyarrow文件上执行regexp可能有任何效率优势吗?更普遍地说,是否有任何已发布的基准测试来使用Pyarrow进行中间计算,而不是使用BigQuery?
谢谢,
发布于 2022-03-06 01:13:50
我不知道已经公布的基准。从您的示例中还不清楚,但是如果最终目标是每种数据类型一列,并且限制为100000行,那么我希望您可以以这样或那样的方式优化这个过程,在bigquery中这样或那样快。Bigquery确实具有非常大的数据集,在这些数据集中,您可以从机器之间自动并行获得很大的好处。对于可以在一台机器上运行的东西,pyarrow将具有竞争力,因为它的核心主要是委托给c++的。如果你的目标是端到端的速度在这里,你可能也想看看烧烤的BI引擎。
https://stackoverflow.com/questions/71311226
复制相似问题