当前位置: 首页 > 知识库问答 >
问题:

如何将Spark Dataframe写入HBase?

周泰
2023-03-14

我试图将spark dataframe写入hbase并关注了其他几个博客,其中一个就是这个,但它不起作用。

但是,我可以成功地从HBASE读取数据为dataframe。此外,一些帖子使用了org.apache.hadoop.hbase.spark格式,其他帖子使用了org.apache.spark.sql.execution.datasources.hbase格式。我不确定该用哪一个。Spark-2.2.2HBASE-1.4.7Scala-2.11.12HortonWorks SHC 1.1.0-2.1-S2.11从这里开始。

守则如下:

case class UserMessageRecord(
                          rowkey: String,
                          Name: String,
                          Number: String,
                          message: String,
                          lastTS: String
                        )//this has been defined outside of the object scope

val exmple = List(UserMessageRecord("86325980047644033486","enrique","123455678",msgTemplate,timeStamp))

import spark.sqlContext.implicits._

val userDF = exmple.toDF()

//write to HBase
userDF.write
      .options(Map(HBaseTableCatalog.tableCatalog -> catalog))
      .format("org.apache.spark.sql.execution.datasources.hbase").save() //exception here

//read from HBase and it's working fine
def withCatalog(cat: String): DataFrame = {
      spark.sqlContext
    .read
    .options(Map(HBaseTableCatalog.tableCatalog->cat))
    .format("org.apache.spark.sql.execution.datasources.hbase")
    .load()
    }
    val df = withCatalog(catalog)
df.show()

这里有个例外:

在org.apache.hadoop.hbase.security.userprovider.instantiate(userprovider.java:122)在org.apache.hadoop.hbase.client.connectionfactory.createConnection(connectionfactory.java:214)在org.apache.hadoop.hbase.client.crenectionfactory.createConnection(connectionfactory.java:119)在.io.sparkhadoopmapreduceWriter$.write(sparkhadoopmapreduceWriter.scala:76)在org.apache.spark.rdd.pairrddfunctions$$anonfunt$saveasnewapihadoopdataSet$1.在org.apache.spark.rdd.pairrddfunctions.scale.apirrddfunctions.scale.apirrddfunctions.scala:1085)在S.Scala:1085)在org.apache.spark.rdd.rddOperationScope$.WithScope(rddOperationScope.scala:151)在org.apache.spark.rdd.rddOperatIonScope$.WithScope(rddoperationScope.scala:112)在org.apache.spark.rdd.rdd.rdd.wairrddfunctions.saveasnewapihadoopDataSet(Pairrddfunctions.scala:1084)在org.apache.spark.sql.execution.datasources.hbase.hbaserelation.inser(hbaserelation.scala:218)在sql.execution.datasources.datasource.writ(datasource.scala:469)在org.apache.spark.sql.execution.sql.execution.command.run(saveintodatasourceCommand.scala:48)在(commands.scala:74)在org.apache.spark.sql.execution.sparkplan$$anonfun$execute$1.apply(sparkplan.scala:117)在org.apache。spark.sql.execution.sparkplan$$anonfun$execute$1.Applic(sparkplan.scala:117)在org.apache.spark.sql.execution.sparkplan$$anonfun$executeQuery$1.Applic(sparkplan.scala:138)在org.apache.spark.rdd.rdperationScope$.withscope(rddoperationscala:151)在org.apache.spark.sql.execution.sparkplan.execution.query,在execution.tordd$lzycompute(queryexecution.scala:92)在org.apache.spark.sql.execution.queryexecution.tordd(queryexecution.scala:92)在org.apache.spark.sql.dataframewriter.runcommand(dataframewriter.scala:609)在org.apache.spark.sql.dataframewriter.scala:233)在scala)

共有1个答案

郭修平
2023-03-14

正如在这里所讨论的,我对SparkSession builder进行了额外的配置更改,异常消失了。然而,我不清楚原因和解决办法

val spark: SparkSession = SparkSession.builder()
  .master("local[1]")
  .appName("HbaseSparkWrite")
  .config("spark.hadoop.validateOutputSpecs", false)
  .getOrCreate()

 类似资料:
  • 问题内容: 我有一个问题-如何将结果/数据库选择写入JTextArea。我的JButton的方法是: 如果使用 -在控制台中看到输出,但是如何将Text设置为JTextArea? 问题答案: 请参阅文档。

  • 问题内容: 有 DataFrame.to_sql 方法,但仅适用于mysql,sqlite和oracle数据库。我无法传递给此方法postgres连接或sqlalchemy引擎。 问题答案: 从pandas 0.14(2014年5月发行)开始,支持postgresql。该模块现在用于支持不同的数据库风格。您可以为PostgreSQL数据库传递sqlalchemy引擎(请参阅docs)。例如: 您是

  • 问题内容: 我有一个java.sql.Blob的JPA实体: 如何创建该实体的实例?我想设置与方法,但如何让从JPA?只是接口,对于不同的数据库有不同的实现,因此我认为JPA应该给我正确的实现。如何获得? 问题答案: 使用字节数组: 如果要使用流,请使用以下命令创建Blob:

  • 问题内容: 我正在尝试使用Go写入日志文件。 我尝试了几种方法,但都失败了。这是我尝试过的: 日志文件被创建,但是没有任何打印或附加到该文件。为什么? 问题答案: 过去的工作方式一定不同,但这对我有用: 基于Go文档,不能用于,因为它会打开文件“供阅读:” 打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符具有mode 。如果有错误,它将是类型。 编辑 检查后移至

  • 问题内容: 我试图将XML 存储到XML文件中,以便稍后可以检索信息,然后将其显示回控制台。 有人可以告诉我最有效的方法吗? 编辑: 这是我要写入外​​部文件的内容 这一切都创建了一个Bank用户,该用户被扔到中,然后我想存储他们的信息,以便稍后返回并重新显示。 问题答案: //根据需要修改下面的类 //下面的类实际写了

  • 我正在努力将Java代码转换为javascript。为此,例如,我正在将public静态int primesolution转换为函数primesolution。我不太知道我是否在转换它的正确轨道上。我被困在公共静态空main(String[]args)中。如何将此函数转换为Javascript。非常感谢任何帮助。 我用JavaScript转换的代码