Dataframe 使用spark将Hbase表转储到CSV会导致数据丢失

Dataframe 使用spark将Hbase表转储到CSV会导致数据丢失,dataframe,apache-spark,hbase,export-to-csv,Dataframe,Apache Spark,Hbase,Export To Csv,使用phoenix和spark将数据从hbase导出到csv时会导致数据丢失。我的hbase表中有2200万行,当我将其导出到csv时,只有1900万行。缺少300万行 在写入csv之前,我尝试过缓存数据帧,但结果仍然是1900万行。我使用了coalesce,因为我需要在一个CSV文件中保存所有内容 我还尝试使用导出!记录在凤凰城,但这里的问题是,数据是巨大的,需要永远加载 !!输出格式csv !!记录数据.csv 从表中选择* !!记录 !!退出 如果有,我可以导出我的hbase表而不丢失任何

使用phoenix和spark将数据从hbase导出到csv时会导致数据丢失。我的hbase表中有2200万行,当我将其导出到csv时,只有1900万行。缺少300万行

在写入csv之前,我尝试过缓存数据帧,但结果仍然是1900万行。我使用了coalesce,因为我需要在一个CSV文件中保存所有内容

我还尝试使用导出!记录在凤凰城,但这里的问题是,数据是巨大的,需要永远加载

  • !!输出格式csv
  • !!记录数据.csv
  • 从表中选择*
  • !!记录
  • !!退出
  • 如果有,我可以导出我的hbase表而不丢失任何数据吗?或者有人可以帮我编辑代码,或者任何建议都会有很大帮助

    我在Scala中的Spark代码:

    import org.apache.log4j.lf5.LogLevel
    import org.apache.spark.sql.SparkSession
    
    object ExportCSV {
      def main(args: Array[String]): Unit = {
    
        val table_name = "xyz"
        val phoenix_zk = "jdbc:phoenix:zkurl"
    
        Logger.getLogger("org").setLevel(Level.ERROR)
        Logger.getLogger("akka").setLevel(Level.ERROR)
    
        val spark = SparkSession.builder().master("local[*]")
          .config("spark.debug.maxToStringFields", "100")
          //.config("spark.driver.maxResultSize", "2g")
          .config("spark.yarn.executor.memoryOverhead", "4g")
          .appName("SparkPhoenix")
          .getOrCreate()
    
    
    
        val df = spark.read.format("jdbc").options(
        Map("driver" -> "org.apache.phoenix.jdbc.PhoenixDriver",
        "url" -> phoenix_zk,
        "dbtable" -> xyz)).load()
    
    
        print(df.count())  //22 million rows in dataframe
        df.cache()
        print(df.count())  //19 million rows after cache
    
        df.explain(extended = true)
    
    
        df.coalesce(1).write.mode("append").option("header", "true").csv("/tchiring/export_test")
    
      }
    }
    
    
    
    
    
    因此,很可能您正在阅读您的表格两次。delta是否可能是HBase端的其他操作/流程的结果?因此,很可能您正在阅读您的表格两次。delta是否可能是HBase端的其他操作/流程的结果?