Spark SQL Dataframe 写入oracle

Spark操作Oracle数据库示例
本文介绍使用Spark连接并写入Oracle数据库的方法,通过定义URL、用户名、密码和驱动等参数,创建属性集,并利用SQLContext将RDD转换为DataFrame,最终以追加模式将数据写入指定的Oracle数据库表中。

可以看此处文章https://xvlvzhu.github.io/2018/01/07/Spark%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E5%BA%93%E7%A4%BA%E4%BE%8B/
以下是写入Oracle数据库

 val url = "jdbc:oracle:thin:@//ip:1521/数据库名称"
  val user = "ods"
  val password = "oracle"
  val driver = "oracle.jdbc.driver.OracleDriver"
  val dbmap = Map("url" -> url, "user" -> user, "password" -> password, "driver" -> driver)
  val properties = new Properties()
  properties.setProperty("url", url)
  properties.setProperty("user", user)
  properties.setProperty("password", password)
  properties.setProperty("driver", driver)

  def saveSummary(rowrdd: RDD[Row], sqlContext: SQLContext): Unit = {
    //DateTypes.createStructField()
   val schema= StructType(List(StructField("mon_th",IntegerType, true)
      , StructField("current_date", DateType, true)
      , StructField("amount", DoubleType, true)
      , StructField("account_code", StringType, true)
      , StructField("summary_code", StringType, true)
      , StructField("project", StringType, true)
    ))
    val dataFrame=sqlContext.createDataFrame(rowrdd,schema)
    dataFrame.show()
    dataFrame.write.mode(SaveMode.Append).jdbc(url,"表名",properties)
  }
### Spark SQL与Hive的集成及对比 #### 1. Spark SQL与Hive的集成 Spark SQL可以通过`HiveContext`或`SparkSession`与Hive进行集成。具体来说,`HiveContext`是Spark SQL执行引擎的一个实例,它能够与存储在Hive中的数据进行交互[^1]。通过读取类路径中的`hive-site.xml`文件,Spark SQL可以获取Hive的配置信息,并访问Hive元数据数据。此外,`HiveContext`提供了完整的Spark SQL支持,包括对Hive表的查询功能。 在实际操作中,用户可以通过以下代码创建一个`HiveContext`实例: ```scala val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) ``` 这使得Spark SQL能够无缝地与Hive表进行交互,包括读取和写入数据。例如,读取Hive表的数据可以通过`spark.table(tableName)`实现[^4]。 #### 2. Spark SQL与Hive的功能对比 ##### 数据处理能力 Hive是一个构建在Hadoop之上的数据仓库工具,主要用于批量数据处理。它依赖于HDFS存储数据,并通过MapReduce来处理数据[^3]。然而,由于Hive底层使用的是MapReduce,其执行速度相对较慢,尤其是在需要多次迭代的复杂查询场景中。 相比之下,Spark SQL建立在Spark计算框架之上,具有更高的性能和更低的延迟。Spark SQL不仅可以处理结构化数据,还可以与Hive无缝集成,同时支持更复杂的SQL查询和数据分析任务。 ##### 扩展性 Hive的扩展性与Hadoop一致,理论上可以扩展到数千台节点。例如,Yahoo!在2009年已经拥有规模达到4000台节点的Hadoop集群[^2]。而传统数据库(如Oracle)由于受到ACID语义的严格限制,扩展性较差,通常只能扩展到100台左右的节点。 Spark SQL继承了Spark的分布式计算特性,能够在大规模集群上高效运行。因此,在扩展性方面,Spark SQL与Hive相当,但性能表现更优,特别是在实时性和复杂查询场景下。 ##### SQL支持程度 Hive提供了一种类似SQL的语言——HiveQL,用于简化用户的编程工作。然而,HiveQL并不完全支持SQL标准,例如不支持更新操作、索引和事务,且其子查询和连接操作存在较多限制。 Spark SQL则提供了更全面的SQL支持,不仅兼容HiveQL,还支持标准SQL语法。此外,Spark SQL还支持DataFrame和Dataset API,为用户提供更多的编程灵活性。 ##### 使用场景 - **Hive**:适合用于批处理任务,尤其是那些对延迟要求不高但数据量较大的场景。 - **Spark SQL**:适合用于需要高性能、低延迟的场景,例如实时数据分析、机器学习和复杂的交互式查询。 #### 示例代码 以下是一个简单的示例,展示如何使用Spark SQL读取Hive表并执行查询: ```scala val spark = SparkSession.builder() .appName("HiveIntegration") .enableHiveSupport() .getOrCreate() // 查询Hive表 val hiveTableData = spark.sql("SELECT * FROM hive_table_name") hiveTableData.show() ``` ### 结论 Spark SQL与Hive的集成使得用户可以在保留Hive生态的同时,利用Spark的强大计算能力。两者的主要区别在于性能、SQL支持程度和适用场景。对于需要高性能和复杂查询的应用,Spark SQL是更好的选择;而对于传统的批处理任务,Hive仍然是一种可靠的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值