使用时间戳处理大型csv文件

时间:2015-08-19 01:56:26

标签: php python mysql csv

我有一个带有

的大型csv文件

user_id,timestamp,page_id,session_id

我需要弄清楚每个用户在页面上花费的时间。每个用户和页面可以有多行。

我需要检索用户和页面的最大时间戳 我需要为用户和页面获取最小的时间戳。

差异将是用户在每个页面上花费的时间。

如何处理55MB CSV文件并处理数据以输出用户在每个页面上花费的时间?

我可以使用PHP吗?这有效吗?

2 个答案:

答案 0 :(得分:0)

我认为您可以将数据导入mysql服务器并使用mysql查询来解决这个问题。

SELECT user_id, page_id, session_id, MAX( TIMESTAMP ) - MIN( TIMESTAMP ) AS sec
FROM  csv
GROUP BY user_id, page_id, session_id

答案 1 :(得分:0)

这可以在PHP中完成(参见http://php.net/manual/en/function.fgetcsv.php)。

解决方案的概要如下:

$data = [];

if (($fileHandle = fopen("test.csv", "r")) !== false) {
    while (($data = fgetcsv($handle, 1000, ",")) !== false) {
        $user_id = (int)$data[0];
        if (!isset($data[$user_id])) {
            $data[$user_id] = new stdClass;
        }

        $record = $data[$user_id];
        $timestamp = (int)$data[1];

        if (!isset($record->min) || $timestamp < $record->min) {
            $record->min = $timestamp;
        }

        if (!isset($record->max) || $timestamp > $record->max) {
            $record->max = $timestamp;
        }

        $data[$user_id] = $record;            
    }

    fclose($fileHandle);
}

这将设置用户ID到最小和最大时间的映射。一旦建立了这些数据,计算就应该非常简单。