jsonsのグループからデータフレームを作成する際にスキーマを推測したくないのですが、私はcsvから読み取るときのようにinferSchema = 'false'
を渡すことはできません。ここで私はデータを読み込む方法です:jsonからデータフレームを作成する際にスキーマを推論しない方法は?
df = spark.read.json(r's3://mypath/')
jsonsのグループからデータフレームを作成する際にスキーマを推測したくないのですが、私はcsvから読み取るときのようにinferSchema = 'false'
を渡すことはできません。ここで私はデータを読み込む方法です:jsonからデータフレームを作成する際にスキーマを推論しない方法は?
df = spark.read.json(r's3://mypath/')
しばらく見た後、私は、パラメータを使用することができますdocsで見つかった「primitivesAsString」
df = spark.read.json(r's3://mypath/', primitivesAsString='true')
は、私は、少なくとも推論を禁止することができますこの方法は、プリムタイプの場合しかし、私は配列や構造体のためにそれを避けるつもりはありません。それでも、それは私の作品です。
スキーマを推測する代わりに、自分で作成してSparkに使用させることができます。
schema = StructType([StructField('name', StringType(), True),
StructField('datetime', TimestampType(), True)
StructField('age', IntegerType(), True)])
df = spark.read.schema(schema).json(r's3://mypath/')
これは、JSONファイルの構造を事前に知っている場合にのみ有効です。ただし、構造が異なる複数のファイルがある場合は、同じスキーマで読み込むことで一緒にマージできます。いくつかの列を持たないファイルは単にそれらの値がnull
になります。
この問題は、私は何を期待するのか分からない、つまり、私はjsonからの列の名前を知らないということです。 – lfvv
@Ifvv:はい、これは、使用する列が分かっている場合にのみ機能します。関心のある異なる列がjsonファイルに含まれている場合は、すべて同じスキーマで指定できます。欠落している列の場合、値はNULLになります。 – Shaido