pyspark 读写es和mysql

读写es

spark 读 es

    properties = {
        'es.nodes.wan.only': True,
        'es.nodes': "host:port,host:por,host:por",
        'es.port': 9202,
        'es.net.http.auth.user': 'user',
        'es.net.http.auth.pass': 'pass',
        'es.batch.size.entries': 10000,
        'es.batch.size.bytes': 200 * 1024 * 1024
    }
    df = spark.read.format('es').options(**properties).load('hive_table').show()

spark 写 es

    properties = {
        'es.nodes.wan.only': True,
        'es.nodes': "host:por,host:por,host:por",
        'es.port': 9202,
        'es.net.http.auth.user': 'user',
        'es.net.http.auth.pass': 'pass',
        'es.batch.size.entries': 10000,
        'es.batch.size.bytes': 200 * 1024 * 1024
    }
    df = spark.read.format('es').options(**properties).load('hive_table').show()
    df.write.format('org.elasticsearch.spark.sql').options(**properties ).mode('append').save("hive_table")

es相关参数
官网
参考

读写mysql

  • 网上常规的读取mysql方法
prop = {'user': user,
        'password': password,
        'driver': 'com.mysql.cj.jdbc.Driver'}

spark = SparkSession.builder.enableHiveSupport().getOrCreate()

df = spark.read.jdbc(
      f'jdbc:mysql://{host}:{port}/database?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8',
      'table_name', properties=prop)

但是这样会有一个问题,会直接把mysql的全表读取进内存,之后才能再使用df.filter或df.where的方法进行过滤,万一mysql的数据量很大,那就明显得不偿失。

  • 按照sql进行读取(网上很少)
prop = {'user': user,
      'password': password,
      'driver': 'com.mysql.cj.jdbc.Driver',
      'url': f'jdbc:mysql://{host}:{port}/?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8',
      'query': 'select * from table where confirm_flag=1'}

spark = SparkSession.builder.config('spark.sql.hive.convertMetastoreParquet', False).enableHiveSupport().getOrCreate()

df = spark.read.format('jdbc').options(**prop).load()

其中,query可以用dbtable代替
dbtable:应该读取或者写入的JDBC表,可以使用SQL查询的FROM子句中有效的任何内容,比如,你可以使用括号中的子查询代替完整表,但是“dbtable”和“query”不可以同时使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值