Parse允许用户使用他们的导出工具下载他们的数据,但只允许以
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对象而不是json_decode?
最佳答案 如果您能够在浏览器中运行脚本,请查看
PapaParse JavaScript库 – 它支持更大数据集的分块和多线程,并且可以转换为
JSON to CSV.
可能相关的具体config options:
>工人
>块
> fastMode
或者,Node.js有一个fork of PapaParse,但没有worker和chunk选项.
我与此库没有任何关联,但已成功用于大型数据集上的CSV到JSON转换.