Hassop 2.7でSpark 2.1.1を使用して、Cassandraから特定のパーティション化されたHiveテーブルにデータを抽出しようとしています。これを行うために、私は私がrdd.toDF(経由でデータフレームに変換RDD)にカサンドラからすべてのデータを持っているし、次の関数に渡さ:カサンドラに見たときSparkSQLステージングテーブルの行数vsハイブロー数
public def writeToHive(ss: SparkSession, df: DataFrame) {
df.createOrReplaceTempView(tablename)
val cols = df.columns
val schema = df.schema
// logs 358
LOG.info(s"""SELECT COUNT(*) FROM ${tablename}""")
val outdf = ss.sql(s"""INSERT INTO TABLE ${db}.${t} PARTITION (date="${destPartition}") SELECT * FROM ${tablename}""")
// Have also tried the following lines below, but yielded the same results
// var dfInput_1 = dfInput.withColumn("region", lit(s"${destPartition}"))
// dfInput_1.write.mode("append").insertInto(s"${db}.${t}")
// logs 358
LOG.info(s"""SELECT COUNT(*) FROM ${tablename}""")
// logs 423
LOG.info(s"""SELECT COUNT(*) FROM ${db}.${t} where date='${destPartition}'""")
}
、358は確かにあります表の行。私はこの記事をHortonworks https://community.hortonworks.com/questions/51322/count-msmatch-while-using-the-parquet-file-in-spar.htmlに見ましたが、解決策はないようです。 spark.sql.hive.metastorePartitionPruningをtrueに設定しようとしましたが、行数に変更は見られませんでした。
なぜ行数の間に矛盾があるかについてのフィードバックが大好きです。ありがとう!
EDIT:不正なデータが入ってくる....
*「日本語や中国語のような非utf8文字」* - 意味がありません。私は、UTF-8とASCIIが "英語"アルファベットと同じコードを共有しているという事実を言及していると思います。たぶんあなたは[すべてのソフトウェア開発者が絶対に最低限必要とする、絶対確実にUnicodeと文字セットについて知っておく必要があります(言い訳はありません)]を読むべきです(https://www.joelonsoftware.com/2003/10/08/the-absolute - 最小限のソフトウェアデベロッパー - 絶対に積極的に必要な、ユニコードとキャラクターセットについての言い訳はありません。 – GolezTrol