実際にコードを使用すると、私のためにクラッシュします。私はの代わりに文字列を使用していると思われます。です。 '"'.toString
を.option("quote",...)
に使用すると、クラッシュが修正され、機能します。さらに、次のコードのようにエスケープ文字を定義することもできます。 (ユニットテストから)解析された数値の
spark.read
.option("mode", "FAILFAST")
.option("escape", "\"")
.option("delimiter", DELIMITER)
.option("header", HASHEADER.toString)
.option("quote", "\"")
.option("nullValue", null)
.option("ignoreLeadingWhiteSpace", value = true)
.schema(SCHEMA)
.csv(PATH)
例:
ClouderaののSpark2で
、Iは、予め定義されたスキーマを用いて、DecimalType
の両方引用と引用符で囲まれていない番号を解析するために以下を使用することができました
1.0
11
"15.23"
""
//empty field
"0.0000000001"
1111111111111.
000000000. //with leading space
これは私のテストでもIntegerType
で動作します。これは引用符に関係なく解析できます。
残念ながら、それは私の間違いです。私は実際のコードで文字を使用していません。文字列ではなく文字列として返す私のスキーマ作成クラスからパラメータを取得しています(簡単に言うと、誤って '' '"' '' '' '' '' 'の代わりに使用しました。おそらくClouderaのSpark2バージョンとJava 2.1.1 mavenビルドの違いかもしれません。 – DeeVu
@DeeVuいいえ、それはありません。2.1.1を使用するようにbuild.sbtを変更したばかりで、私のユニットテストはまだ緑です。スキーマをどのように定義しましたか? –
良いキャッチ。あなたはこれがまさにスキーマの問題だったのです。私のデモセットは、100桁のカラムのうちの1つを10進数の整数にキャストしようとしていました。私は私の机の上に頭を叩いていると言うことができます。 – DeeVu