我有一个带有
的大型csv文件user_id,timestamp,page_id,session_id
我需要弄清楚每个用户在页面上花费的时间。每个用户和页面可以有多行。
我需要检索用户和页面的最大时间戳 我需要为用户和页面获取最小的时间戳。
差异将是用户在每个页面上花费的时间。
如何处理55MB CSV文件并处理数据以输出用户在每个页面上花费的时间?
我可以使用PHP吗?这有效吗?
答案 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到最小和最大时间的映射。一旦建立了这些数据,计算就应该非常简单。