gpt4 book ai didi

python - PySpark - 从数据帧创建多个 json 文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:52 24 4
gpt4 key购买 nike

我有以下格式的数据,这些数据是从 Hive 获取到数据帧中的:

date, stock, price
1388534400, GOOG, 50
1388534400, FB, 60
1388534400, MSFT, 55
1388620800, GOOG, 52
1388620800, FB, 61
1388620800, MSFT, 55

其中 date 是当天午夜的纪元,我们有 10 年前左右的数据(8 亿多行)。我的目标是最终得到一堆 JSON 文件,每个股票一个,如下所示:

GOOG.json:
{
'1388534400': 50,
'1388620800': 52
}

FB.json:
{
'1388534400': 60,
'1388620800': 61
}

一种天真的方法是获取唯一股票的列表,然后通过仅过滤掉每只股票的那些行来获取数据帧的子集,但这似乎过于天真且效率极低。这在 Spark 中可以轻松完成吗?我目前已经使用 PyHive 在 native Python 中工作,但由于数据量巨大,我宁愿在集群/Spark 上完成此操作。

最佳答案

是的。这非常简单。您可以使用DataFrameWriter并使用partitionBy - 指定要分区的列(在您的情况下它将是库存)

来自 Pyspark 文档:

df.write.partitionBy('year', 'month').parquet(os.path.join(tempfile.mkdtemp(), 'data'))

对你来说这就是

df.write.partitionBy('stock').json(os.path.join(tempfile.mkdtemp(), 'data'))

注意一些事项:

  • 这可能需要大量的改组,具体取决于 Hive 表的布局方式。
  • 即使在分区之后,每个分区也可能会包含多个文件,具体取决于该分区中有多少记录。例如30% 的事件可能是针对 GOOG 的,在这种情况下,GOOG 的分区将比其他分区大得多。如果遇到这种情况,您只需为每个分区运行一个文件串联脚本即可。然而,每个分区中的文件仍然是针对一个股票。

关于python - PySpark - 从数据帧创建多个 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com