Open teeyog opened 6 years ago
为什么df可以调用 那个方法
@SteveYanzhi
import org.apache.hack.spark._
这里面有隐式转换
implicit def toSparkSqlContextFunctions(spark: SparkSession): SparkSqlContextFunctions = {
new SparkSqlContextFunctions(spark)
}
implicit def toDataFrameFunctions(data: DataFrame): DataFrameFunctions = {
new DataFrameFunctions(data)
}
@SteveYanzhi 没有,后面发的是最新的,功能更完善。
代码真的写的很棒
背景
Spark支持多种数据源,但是Spark对HBase 的读写都没有相对优雅的api,但spark和HBase整合的场景又比较多,故通过spark的DataSource API自己实现了一套比较方便操作HBase的API。
写 HBase
写HBase会根据Dataframe的schema写入对应数据类型的数据到Hbase,先上使用示例:
上面两种方式实现的效果是一样的,下面解释一下每个参数的含义:
读 HBase
示例代码如下:
spark和hbase表的schema映射关系指定不是必须的,默认会生成rowkey和content两个字段,content是由所有字段组成的json字符串,可通过
field.type.fieldname
对单个字段设置数据类型,默认都是StringType。这样映射出来还得通过spark程序转一下才是你想要的样子,而且所有字段都会去扫描,相对来说不是特别高效。故我们可自定义schema映射来获取数据:
注意这两个schema是一一对应的,Hbase只会扫描
hbase.table.schema
对应的列。核心代码
写 HBase
读Hbase
扩展的DataSource都需要是名为DefaultSource 的类
参考