php – 将Parse JSON输出转换为具有大型数据集的CSV

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转换.

点赞