データを追加しようとしているテーブル「tablename」が"Hive serde"
で作成されているため、テーブルtablename
のデータがテキストファイルとして保存されるためです。
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
serdeを使用してparquet
形式でデータを書き込む、saveAsTable
Apiを使用しています。だから、スパークAPIは、テキストで寄せ木細工のデータを追加することはできません、その理由は例外です。
解決策:事前にテーブルを作成しないでください。 "saveAsTable
" Apiは、データフレームのスキーマと最初に必要なプロパティを使用してテーブル自体を作成してから、データを追加し続けます。
テーブルを自分で作成する必要がある場合は、テーブルがパーケットとして適切にTBLPROPERTIES
に格納されていることを確認する必要があります。例えば:
CREATE TABLE `savetest`(
`channel` string,
`address` string,
`curr_date` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
TBLPROPERTIES (
'COLUMN_STATS_ACCURATE'='false',
'numFiles'='2',
'numRows'='-1',
'rawDataSize'='-1',
'spark.sql.sources.provider'='parquet',
'spark.sql.sources.schema.numParts'='1',
'spark.sql.sources.schema.part.0'='{\"type\":\"struct\",\"fields\":[{\"name\":\"channel\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"address\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"curr_date\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}}]}'
)
あなたのテーブルは既に存在しますか? – hlagos
はい。私は既存のテーブルに追加しようとしています – 7luckyseven7
あなたのテーブルフォーマットは何ですか?保存中に書式を指定して問題を解決しますか?たとえば、寄木張りの場合 df.write(appendMode).format( "parquet")。 saveAsTable( "tablename"); – hlagos