Pyspark以DataFrame格式读写Hbase

Pyspark以DataFrame格式读写Hbase

本文代码参考了__miss的博客,特别感谢,原文地址如下

链接:https://blog.csdn.net/u011412768/article/details/93404921

我使用的环境:CDH集群,资源监控使用的yarn,  spark2.3,hbase1.6 。
读写方式:Hbase默认API  
默认环境大家都已配置好。代码可以直接使用。

本文档代码分为两个部分:
一、PySpark读取Hbase表,并将RDD转换为DataFrame格式;
二、PySpark写入Hbase,将DataFrame格式数据写入Hbase;

一、PySpark读取Hbase表,并将RDD转换为DataFrame格式
1、定义两个函数用于转换读取Hbase数据的RDD。

#! /bin/python2
# --*-- coding:utf-8 --*--
from pyspark.sql import SparkSession
import json

def row_transform(row_cells_info, hbase_structure):
    """
    这个函数是一行一行读取hbase_rdd中的record,然后将每个列里面的数据提取出来,最终形成一个dict,这个dict的结构
    大概是这样的{column_name1:value1, column_name2:value2, column_name3:value3},如果hbase里面有些列没有值,就是
    压根没存这个字段,可以给这个字段填充一个“Null”值,以便后续可以转为dataframe格式(但是这里的“Null”就是一个字
    符串,和dataframe里面本身没有值自动默认为的“Null”是不一样的,前者在用filter这个函数是,条件要写“!=Null”,而后
    者则需要用“isNotNull()”这个函数)
    """
    row_cell_info_list = [json.loads(i) for i in row_cells_info]
    row_dict = {
   
   }
    for hbase_index in range(len(hbase_structure)):
        for cell_index in range(len(row_cell_info_list)):
            column_name = row_cell_info_list[cell_index]['qualifier']
            column_value = row_cell_info_list[cell_index]['value']
            if hbase_structure[hbase_index] == column_name:
                row_dict[column_name] = column_value.encode('utf-8')
                break
            else:<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值