2

Amazon S3 でファイルを 1 行ずつ読み取ることはできますか? 私は、人々が大きなファイルをどこかにアップロードしてから、いくつかのコード (おそらく Amazon で実行されている) にファイルを 1 行ずつ読み取らせ、おそらくマップを削減したマルチスレッド方式で何かを実行させたいと考えています。または、一度に 1000 行を読み込めるだけかもしれません... 何か提案はありますか?

4

3 に答える 3

1

Amazon S3 は範囲リクエストをサポートしていますが、ファイルを 1 行ずつ読み取るようには設計されていません。

ただし、Amazon Elastic MapReduceは、探しているものに適しているようです。使用される S3 と EC2 インスタンス間の転送は非常に高速であり、その後は好きなように作業を分割できます。

于 2011-04-11T07:18:27.187 に答える
0

これは、あなたが求めていることを実行しているように見えるPHPのスニペットの例です(file.txtの最初の1000行を取得し、それらを連結します)。それは少し矛盾していますが、アイデアは他の言語で、または他の技術を使用して実装することができます。重要なのは、S3をWindowsやLinuxなどの他のファイルシステムと同じように扱うことです。唯一の違いは、S3キーの資格情報を使用し、ファイルパスをs3://your_directory_tree/your_file.txtに設定することです。

<?php 
    set_time_limit(0); 
    include("gs3.php"); 
    /* fake keys!, please put yours */ 
    define('S3_KEY', 'DA5S4D5A6S4D'); 
    define('S3_PRIVATE','adsadasd');

    $f = fopen('s3://mydir/file.txt', 'r');
    $c = "";
    $d = 0;

    $handle = @fopen('s3://mydir/file.txt', "r");
    if ($handle) {
        while (($buffer = fgets($handle)) !== false  && $d < 1000) {
            $c .= $buffer; /* concatenate the string (newlines attached)*/
            $d += 1; /* increment the count*?
        }
        if (!feof($handle)) {
            echo "Error: unexpected fgets() fail\n";
        }
        else{
            print "$c"
        }

        fclose($handle);
    }
?> 
于 2011-04-11T23:13:13.677 に答える