使用PySpark操作kudu

1.从kudu中加载数据

使用pyspark需要导入spark中的包,并且初始化SparkSession。

    import os
    import sys
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.appName("test").getOrCreate()

2.读取kudu中的数据

   df=spark.read.format("org.apache.kudu.spark.kudu") \
                .option("kudu.table", "kudutable") \
                .option('kudu.master', "kudu_master1:7051,kudu_master2:7051,kudu_master3:7051") \
                .load()

3.把dateframe中的数据写入kudu

   df.write.format('org.apache.kudu.spark.kudu') \
                .option('kudu.master', "kudu_master1:7051,kudu_master2:7051,kudu_master3:7051") \
                .mode('append') \
                .option('kudu.table', "test")\
                .save()

dataframe的数据写入kudu有4种模式:

  • insert 插入模式,表中不能存在key相同的,否则会报错。
  • insert-ignore 忽略模式,表中没有的会插入,有的则不插入保留原数据。
  • upsert 替换模式,表中没有的会插入,有的则替换为现在的数据。
  • update 更新模式,只会更新表中已经存在的数据。
  • delete 删除模式,只能删除key值相同的。
    在不加kudu.option参数的时候,默认使用的upsert模式,上面的代码就相当于这样:
	df.write.format('org.apache.kudu.spark.kudu’) 
			.option('kudu.master’, 'kudu_master1:7051,kudu_master2:7051,kudu_master3:7051') 
			.mode('append’) 
			.option('kudu.table', 'test')
			.option('kudu.option', 'upsert')
			.save()

4.删除kudu中的数据

使用scala和java开发spark,都有直接操作kudu客户端的Api,但很遗憾,pyspark中对这一功能还不支持。只能使用很麻烦的spark Api来删除。
删除kudu中的数据需要先读取,然后转换为只有key的dataframe才可以。

df=spark.read.format("org.apache.kudu.spark.kudu") \
                .option("kudu.table", "kudutable") \
                .option('kudu.master', "kudu_master1:7051,kudu_master2:7051,kudu_master3:7051") \
                .load()
df_result=df.filter("age>10").select("id")
df.write.format('org.apache.kudu.spark.kudu’) 
		.option('kudu.master’, 'kudu_master1:7051,kudu_master2:7051,kudu_master3:7051') 
		.mode('append’) 
		.option('kudu.table', 'test')
		.option('kudu.option', 'delete')
		.save()

总结

使用pyspark操作kudu非常简单,有其便利的地方,也有不利的地方,不能使用kudu Api操作影响太大了,性能也不好,还是尽量使用scala开发吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值