Hbase Spark RDD JSON专栏

时间:2016-06-28 13:48:02

标签: apache-spark hbase

我正在使用nerdammer hbase spark连接器并读取两个hbase表,因为RDD将它们转换为数据帧并运行SQL以使它们按预期工作。

其中一个表中的一个列具有JSON对象,我需要在最终结果中提取特定的JSON属性值,这是如何实现的。 如果我在ARDD的D列中有Json数据,如[{“foo”:“bar”,“baz”:“qux”}]我需要创建新的RDD或DF,其值仅为“baz”在此列中所以最后当我加入时,我只得到这个属性的价值。

 val ARDD = sc.hbaseTable[(Option[String], Option[String], Option[String], Option[String], Option[String],Option[String])](ATableName)
        .select("A","B","C","D","E").inColumnFamily("pCF")

        val BRDD = sc.hbaseTable[(Option[String],Option[String], Option[String], Option[String], Option[String], Option[String],Option[String])](BTableName)
        .select("A","B","C","D","E","F").inColumnFamily("tCF")


    val ADF = sqlContext.createDataFrame(ARDD).registerTempTable("aDF")
    val BDF = sqlContext.createDataFrame(BRDD).registerTempTable("bDF")

val resultset = sqlContext.sql("SELECT aDF._1, bDF._2, bDF._3, bDF._4, bDF._5, bDF._6, bDF._3, aDF._1, aDF._2, bDF._1 FROM aDF, bDFWHERE aDF._5 = bDF._7").collect()

val joinedResult = resultset.foreach(println)
  println("Count " + joinedResult)

1 个答案:

答案 0 :(得分:0)

创建一个UDF来实现这一点并在我的DF中创建了一个具有已解析信息的新列

import org.json4s.jackson.JsonMethods._
import org.apache.spark.sql.functions.udf
def udfScoreToCategory=udf((t: String) => {
   compact((parse(t.toString,true) \ "myField"))})


val abc=  myDF.withColumn("_p", udfScoreToCategory(myDF("_4"))).registerTempTable("odDF")