我在Spark 2中使用pyspark
,是否有任何jar可以将HBase
与pyspark
连接起来。
请帮我提供示例代码。
答案 0 :(得分:1)
您可以访问此link以查看Spark中可用的连接器。
有关此link的更多信息。阅读Readme.md了解详细信息。
以下是您必须添加的依赖项。
您只需在sbt中添加以下依赖项:
libraryDependencies += "it.nerdammer.bigdata" % "spark-hbase-connector_2.10" % "1.0.3"
依赖的Maven样式版本是:
<dependency>
<groupId>it.nerdammer.bigdata</groupId>
<artifactId>spark-hbase-connector_2.10</artifactId>
<version>1.0.3</version>
</dependency>
示例代码:
val sparkConf = new SparkConf()
...
sparkConf.set("spark.hbase.host", "thehost")
...
val sc = new SparkContext(sparkConf)
写入HBase(基础)
写HBase很容易。请记住导入隐式转换:
import it.nerdammer.spark.hbase._
您只需要创建一个示例RDD,如下所示:
val rdd = sc.parallelize(1 to 100)
.map(i => (i.toString, i+1, "Hello"))
这个rdd由元组组成(&#34; 1&#34;,2,&#34; Hello&#34;)或(&#34; 27&#34;,28,&#34; Hello&# 34)。每个元组的第一个元素被认为是行id,其他元素将被分配给列。
rdd.toHBaseTable("mytable")
.toColumns("column1", "column2")
.inColumnFamily("mycf")
.save()
你完成了。 HBase现在在表mytable中包含100行,每行包含列mycf:column1和mycf:column2的两个值。
从HBase(基础)读取
从HBase读取更容易。请记住导入隐式转换:
import it.nerdammer.spark.hbase._
如果您想阅读上一个例子中写的数据,您只需要写:
val hBaseRDD = sc.hbaseTable[(String, Int, String)]("mytable")
.select("column1", "column2")
.inColumnFamily("mycf")
希望,这有帮助。
答案 1 :(得分:1)
作为之前答案的替代方案:
我正在使用hortonworks spark hbase连接器。您可以在github找到它。他们在spark summit上引入了连接器。在演讲结束时,还有一个带有一些示例代码的现场演示。希望,它有所帮助。
---编辑---
示例中的代码是用scala编写的,但连接器也适用于pyspark。这是一个写/读示例:
使用连接器启动PySpark-Shell(也许您必须使用其他版本的软件包进行设置 - 查看github上的介绍和对话)。
pyspark --master yarn --packages com.hortonworks.shc:shc-core:1.1.0.2.6.5.2-8 --repositories http://nexus-private.hortonworks.com/nexus/content/groups/public/
创建一个sql-context并定义数据
sqlc = SQLContext(sc)
data_source_format = 'org.apache.spark.sql.execution.datasources.hbase'
接下来,我们必须定义一个目录,它是连接器可读的表结构。当您可以访问hbase的默认命名空间时,请使用默认值替换YourNameSpace。如果没有,请插入可访问的命名空间。
catalog = ''.join("""{
"table":{"namespace":"YourNameSpace", "name":"TestTable", "tableCoder":"PrimitiveType"},
"rowkey":"key",
"columns":{
"ID":{"cf":"rowkey", "col":"key", "type":"string"},
"DATA":{"cf":"data", "col":"", "type":"string"}
}
}""".split())
要创建一个hbase表并在其中写入内容,我们会创建一个包含一些数据的合适数据帧......
df = sc.parallelize([('1', 'Moin'), ('2', 'Hello'), ('3', 'Hallo')]).toDF(schema=['ID', 'DATA'])
...并将其保存到hbase。
df.write.options(catalog=catalog, newtable = 5).format(data_source_format).save()
现在我们可以从hbase表中读取内容并将其保存到变量中:
df_read = sqlc.read.options(catalog=catalog).format(data_source_format).load()
检查:
>>> df_read.show()
+---+-----+
| ID| DATA|
+---+-----+
| 1| Moin|
| 2|Hello|
| 3|Hallo|
+---+-----+
- 在HDP 2.5上使用PySpark 2进行测试