0

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:不正なデータが入ってくる....

答えて

0

来ることは時々データが日本語や中国語などの非UTF8文字が含まれていることを見てきたはずです。データにutf8以外の文字が含まれていないか確認してください。

この場合、ORC形式で挿入してください。デフォルトではテキストであり、テキストはutf8以外の文字をサポートしていません。

+5

*「日本語や中国語のような非utf8文字」* - 意味がありません。私は、UTF-8とASCIIが "英語"アルファベットと同じコードを共有しているという事実を言及していると思います。たぶんあなたは[すべてのソフトウェア開発者が絶対に最低限必要とする、絶対確実にUnicodeと文字セットについて知っておく必要があります(言い訳はありません)]を読むべきです(https://www.joelonsoftware.com/2003/10/08/the-absolute - 最小限のソフトウェアデベロッパー - 絶対に積極的に必要な、ユニコードとキャラクターセットについての言い訳はありません。 – GolezTrol