【发布时间】:2015-06-24 21:58:23
【问题描述】:
Parse 允许用户使用他们的 Export 工具下载他们的数据,但只允许以 JSON 格式导出数据。我想用 CSV 格式在 Excel 中进行分析。
虽然一个简单的脚本足以处理较小的 JSON 对象,但我正在处理一个包含 670,000 行和超过 360MB 的数据集。在线转换器无法处理此文件大小,经常引用 PHP 超出其内存限制。
我尝试过基于 PHP CLI 的脚本和在线转换器,但它们似乎都超出了分配的内存。当ini_set('memory_limit', '4096M'); 仍然没有给我足够的内存时,我想我需要一种新方法。
我目前正在使用这个基于 CLI 的脚本来解析数据:
// flatten to CSV
function flatten2CSV($file){
$fileIO = fopen($file, 'w+');
foreach ($this->dataArray as $items) {
$flatData = array();
$fields = new RecursiveIteratorIterator(new RecursiveArrayIterator($items));
foreach($fields as $value) {
array_push($flatData, $value);
}
fputcsv($fileIO, $flatData, ";", '"');
}
fclose($fileIO);
}
// and $this->dataArray is created here
function readJSON($JSONdata){
$this->dataArray = json_decode($JSONdata,1);
$this->prependColumnNames();
return $this->dataArray;
}
private function prependColumnNames(){
foreach(array_keys($this->dataArray[0]) as $key){
$keys[0][$key] = $key;
}
$this->dataArray = array_merge($keys, $this->dataArray);
}
如何使用 PHP 解决内存管理问题并通过这个大型数据集进行解析?对于大型数据集,有没有比 json_decode 更好的读取 JSON 对象的方法?
【问题讨论】:
-
是否需要一次处理所有文件?如果可以批量导出 JSON,然后进行单独的转换,您可能不需要那么多的活动内存。你有你正在使用的代码吗? - 这个用例也需要 PHP 吗?
-
可以将 Parse 中的数据导出到较小的数据集中,但这对于定期从数据库中提取数据变得很耗时。我添加了用于解析 JSON 的 JSON2CSV 类。
-
我对 Parse 不熟悉。你能写一个脚本来拉下较小的文件集吗?此外,如果您在网页中运行此程序来进行转换,那么如果您不需要屏幕上的输入,那真的没有意义。在命令行、计划等上作为批处理作业执行此操作更有意义。您能澄清一下为什么要在浏览器中执行此操作吗?
-
所以Parse 是用于移动应用程序开发的流行后端数据库和API 组合。我不是专门在浏览器中执行此操作 - 我对任何将 JSON 更改为 CSV 的方法持开放态度。编写脚本会产生 I/O,这是有问题的,因为 Parse 会限制 API 调用。
标签: php json csv parse-platform