メインコンテンツまでスキップ
非公開のページ
このページは非公開です。 検索対象外となり、このページのリンクに直接アクセスできるユーザーのみに公開されます。

不正なレコードとファイルの処理

Databricks には、不適切なレコードを含むファイルを処理するためのオプションが多数用意されています。 不良データの例としては、次のようなものがあります。

  • 不完全または破損したレコード :主にJSONやCSVなどのテキストベースのファイル形式で観察されます。 たとえば、右中括弧がない JSON レコードや、CSV ファイルのヘッダーまたは最初のレコードほど多くの列がない CSV レコードなどです。
  • データ型の不一致 : 列の値に指定または推論されたデータ型がない場合。
  • フィールド名が正しくない : ファイルまたはレコードで指定された列名の大文字と小文字が、指定または推論されたスキーマと異なる場合に、すべてのファイル形式で発生する可能性があります。
  • 破損したファイル : Avro、Parquet、ORC などのバイナリ ファイルの種類でメタデータまたはデータの破損が原因で、ファイルを読み取れない場合。 まれに、基礎となるストレージ・システムの長期にわたる一時的な障害が原因である可能性があります。
  • 見つからないファイル : クエリ分析時に検出され、処理時には存在しなくなったファイル。

使う badRecordsPath

badRecordsPathを設定すると、指定したパスは、データの読み込み中に検出された不正なレコードまたはファイルの例外を記録します。

レコードやファイルの破損に加えて、削除されたファイル、ネットワーク接続例外、IO 例外などを示すエラーは無視され、 badRecordsPathに記録されます。

注記

ファイルベースのデータソースで badRecordsPath オプションを使用するには、いくつかの重要な制限があります。

  • これは非トランザクションであり、一貫性のない結果につながる可能性があります。
  • 一時的なエラーはエラーとして扱われます。

入力ファイルが見つかりません

Scala
val df = spark.read
.option("badRecordsPath", "/tmp/badRecordsPath")
.format("parquet").load("/input/parquetFile")

// Delete the input parquet file '/input/parquetFile'
dbutils.fs.rm("/input/parquetFile")

df.show()

上記の例では、 df.show() 入力ファイルを見つけることができないため、Sparkはエラーを記録するためにJSON形式で例外ファイルを作成します。 たとえば、 /tmp/badRecordsPath/20170724T101153/bad_files/xyz は例外ファイルのパスです。 このファイルは、指定した badRecordsPath ディレクトリ /tmp/badRecordsPathにあります。 このDataFrameReaderの作成時刻は20170724T101153です。bad_files は例外タイプです。 xyz は、不良ファイルのパスと例外/理由メッセージを含む JSON レコードを含むファイルです。

入力ファイルに不正なレコードが含まれています

Scala
// Creates a json file containing both parsable and corrupted records
Seq("""{"a": 1, "b": 2}""", """{bad-record""").toDF().write.format("text").save("/tmp/input/jsonFile")

val df = spark.read
.option("badRecordsPath", "/tmp/badRecordsPath")
.schema("a int, b int")
.format("json")
.load("/tmp/input/jsonFile")

df.show()

この例では、DataFrame には最初の解析可能なレコード ({"a": 1, "b": 2}) のみが含まれています。 2 番目の不良レコード ({bad-record) は、 /tmp/badRecordsPath/20170724T114715/bad_records/xyzにある JSON ファイルである例外ファイルに記録されます。 例外ファイルには、不良レコード、レコードを含むファイルのパス、および例外/理由メッセージが含まれています。 例外ファイルを見つけたら、JSON リーダーを使用してそれらを処理できます。