2016-06-13 4 views
0

Sparkアプリケーションではコンマ区切りの文字列を受け取り、それを配列として分割して解析します。私はインデックスがよく私のメインの初めに決定されている、 すべてstatic final int。コードの読みやすさは十分ですが、正確にはクリスタルではありませんが、しばらくするとすべてを把握するのが面倒です。擬似コード例:コードの別の部分でSparkStreamingの解析文字列と特定のクラスのオーバーヘッドの初期化

data = receivedString.split(","); 
rdd.map({ 
    someOperation = operation(data[CONSTANT_INDEX]); 
    someOtherOperation = otherOperation(data[INDEX],data[INDEX2]; 
    data[RESULT_INDEX] = thirdOperation(data[THIRD_INDEX];}); 

、私は私のデータをホストするために、それを操作するために特定のクラスを使用してみました:はるかに簡単に私の操作を追跡します。例:

私は毎秒100本のラインを24時間毎に持っていますが、どちらのアプローチをとるべきですか?クラス作成のオーバーヘッドに私の環境をあまりにも重視しますか?
私はこれが「個人的な意見」の旗には入り込まないことを願っています。あなたは個人的にどのアプローチを使用していますか?

+0

私は2つのPOCを作成します.1つは前者をテストし、もう1つは後者をテストします。次に、[YourKit](https://www.yourkit.com/)などのプロファイリングツールを使用して、クラス内の文字列をラップすることによって得られるパフォーマンスのオーバーヘッドを分析します。それから、どちらが私の要求を満たしているかを見ます。これらのクラスをインスタンス化することによるオーバーヘッドは、あなたがやっている他のいくつかの操作(大きな文字列の分割、ネットワーク呼び出しなど)と比較して無視できるほどです。時期尚早の最適化トラップには入らないでください。 –

+1

@YuvalItzchakov正確に私の考え:-) – maasg

答えて

1

"時期尚早最適化はすべての悪の根源です。" - Donald Knuth

コード可読性、テスト容易性、保守性は、SWエンジニアリングの第一の目標です。いくつかのオーバーヘッドでクラスの作成が実際に発生しますが、分散プロセスでのI/Oに比べておそらく無視できます。

コードの品質を向上させる方法を使用し、パフォーマンスの問題が見つかった場合は「金属に移動する」方法のみを使用してください。そして、 "find"では、プロファイリング手法を使用してパフォーマンスの問題点を特定しました。

+0

私はあなたの助言とYuvalに従い、結果を更新する – Vale

関連する問題