CSVファイルから一部のデータを読み込みましたが、文字列値をさまざまなデータ型に解析するカスタムコードがあります。数字のために、私が使用します。Sparkでのdouble値の精度
val format = NumberFormat.getNumberInstance()
DecimalFormat
を返し、私は私の数値を取得することにparse
関数を呼び出しています。 DecimalFormat
には任意の精度がありますので、精度を失うことはありません。ただし、データがSpark DataFrameにプッシュされると、DoubleType
を使用してデータが格納されます。この時点で、私はいくつかの精密な問題を見ることを期待していますが、私はそうではありません。私はCSVファイルに0.1,0.01,0.001、...、1e-11の値を入力しようとしましたが、Spark DataFrameに格納されている値を見ると、それらはすべて正確に表現されます(0.099999999のようにはなりません)。私は任意の精度を格納するdouble値を期待していないので、私はこの動作に驚いています。誰も私がここで魔法を理解するのを助けることができますか?
乾杯!
私はちょうどその表現を推測します。ダブルが扱うことのできる限界に近いものを試してみてください。 –
また、「ダブル」は、範囲内にある限り、値を表すのに適しています。この問題は、倍精度を使用して表される任意の精度の数値に対して操作を実行すると開始されます。 –
ダブルスは、サポートされている範囲内の整数を正確に表しますが、整数の間のすべての10進値を表すわけではないと思いました。それが私が混乱していたものです。 – bbtus