我已经为 100 GB 大小的 522 个 gzip 文件运行了以下代码,解压缩后,它将是大约 320 GB 数据和 protobuf 格式的数据,并将输出写入 GCS。我已经使用 n1 标准机器和区域进行输入,输出都得到了照顾,工作花费了我大约 17 美元,这是半小时的数据,所以我真的很需要在这里做一些成本优化。
我从下面的查询中得到的成本
SELECT l.value AS JobID, ROUND(SUM(cost),3) AS JobCost
FROM `PROJECT.gcp_billing_data.gcp_billing_export_v1_{}` bill,
UNNEST(bill.labels) l
WHERE service.description = 'Cloud Dataflow' and l.key = 'goog-dataflow-job-id' and
extract(date from _PARTITIONTIME) > "2020-12-31"
GROUP BY 1
Run Code Online (Sandbox Code Playgroud)
完整代码
import time
import sys
import argparse
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
from apache_beam.options.pipeline_options import SetupOptions
import csv
import base64
from google.protobuf import timestamp_pb2
from google.protobuf.json_format import MessageToDict …
Run Code Online (Sandbox Code Playgroud) python protocol-buffers avro google-cloud-dataflow apache-beam
我有一个很大的客户端 csv 文件,并通过 url 共享下载,我想逐行或按字节下载它,我只想限制 10 个条目。
我有以下代码将下载文件,但我想在这里只下载文件中的前 10 个条目,我不想要完整的文件。
#!/usr/bin/env python
import requests
from contextlib import closing
import csv
url = "https://example.com.au/catalog/food-catalog.csv"
with closing(requests.get(url, stream=True)) as r:
f = (line.decode('utf-8') for line in r.iter_lines())
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
print(row)
Run Code Online (Sandbox Code Playgroud)
我不太了解contextlib
,它将如何with
在 Python 中使用。
任何人都可以在这里帮助我,这真的很有帮助,并提前致谢。
我有一个名为 users 的 id 列表,想将它们按 80:20 的百分比随机分为两组。
例如,我有一个包含 100 个用户 ID 的列表,并随机将 80 个用户放入 group1,将剩余 20 个用户放入 group2
def getLevelForIncrementality(Object[] args) {
try {
if (args.length >= 1 && args[0]!="") {
String seed = args[0] + "Testing";
int rnd = Math.abs(seed.hashCode() % 100);
return (rnd >= 80 ? 2 : 1);
}
} catch (Exception e) { }
return 3;
}
Run Code Online (Sandbox Code Playgroud)
我从上面的常规代码中尝试过,它给出的比例为 82:18。
有人可以给我一些见解、建议或算法来解决数百万用户 ID 的上述问题吗?