SparkSQL临时表行计数与Hive行计数

时间:2017-06-07 14:54:13

标签: scala hive apache-spark-sql spark-dataframe spark-cassandra-connector

我正在尝试使用Hadoop 2.7上的Spark 2.1.1将数据从Cassandra提取到特​​定的分区Hive表中。为此,我将来自Cassandra的所有数据转换为rdd,我通过rdd.toDF()转换为数据帧,并传递给以下函数:

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}'""")
}

在查看Cassandra时,表中确实有358行。我在Hortonworks https://community.hortonworks.com/questions/51322/count-msmatch-while-using-the-parquet-file-in-spar.html上看过这篇文章,但似乎并不是一个解决方案。我已经尝试将spark.sql.hive.metastorePartitionPruning设置为true,但是没有在行计数中看到任何更改。

非常喜欢有关为什么行数之间存在差异的任何反馈。谢谢!

编辑:糟糕的数据进入......应该会看到即将到来的

1 个答案:

答案 0 :(得分:0)

有时数据包含非utf8字符,如日语或中文。检查数据是否包含任何此类非utf8字符。

如果是这种情况,请以ORC格式插入。默认情况下,它是文本,文本不支持非utf8字符。