Apache Spark以Java方式从Apache Phoenix读取和写入的方式

时间:2016-10-30 14:06:17

标签: java apache-spark apache-spark-sql spark-dataframe phoenix

任何人都可以提供一些示例来从phoenix(完整的表并使用查询)读取DataFrame和Dataset(在Spark 2.0中),并在Apache Spark中将数据帧和数据集(在Spark 2.0中)写入phoenix java的。在java中没有任何记录的示例。

如果可能的话,还提供多种方式,比如从凤凰中读取一种方式是我们可以使用PhoenixConfigurationUtil设置输入类和输入查询然后从sparkContext读取newAPIHadoopRDD,另一种方法是使用sqlContext.read().foramt("jdbc").options(pass a map with configuration keys like driver,url,dbtable).load()并且有使用sqlContext.read().format("org.apache.phoenix.spark").option(pass a map with configuration keys like url,table).load()阅读的另一种方法。

在搜索时,我在Spark 1.6的其他问题中找到了这些方法,但是示例并没有完成,但这些方法只是一点一点地存在,所以我无法完成完整的步骤。 我无法找到Spark 2.0的任何示例

3 个答案:

答案 0 :(得分:2)

这是如何从phoenix

读/写的示例
import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;

import com.google.common.collect.ImmutableMap;

import java.io.Serializable;

public class SparkConnection implements Serializable {

    public static void main(String args[]) {
        SparkConf sparkConf = new SparkConf();
        sparkConf.setAppName("spark-phoenix-df");
        sparkConf.setMaster("local[*]");
        JavaSparkContext sc = new JavaSparkContext(sparkConf);
        SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
        DataFrame fromPhx = sqlContext.read().format("jdbc")
                .options(ImmutableMap.of("driver", "org.apache.phoenix.jdbc.PhoenixDriver", "url",
                        "jdbc:phoenix:ZK_QUORUM:2181:/hbase-secure", "dbtable", "TABLE1"))
                .load();
        fromPhx.write().format("org.apache.phoenix.spark").mode(SaveMode.Overwrite)
        .options(ImmutableMap.of("driver", "org.apache.phoenix.jdbc.PhoenixDriver","zkUrl",
                "jdbc:phoenix:localhost:2181","table","RESULT"))
        .save();
    }
}

答案 1 :(得分:0)

此页面https://github.com/apache/phoenix/tree/master/phoenix-spark包含如何将Phoenix表格加载为RDD或DataFrame以及其他示例。

例如,将表格加载为DataFrame:

import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.phoenix.spark._

val sc = new SparkContext("local", "phoenix-test")
val sqlContext = new SQLContext(sc)

val df = sqlContext.load(
  "org.apache.phoenix.spark", 
  Map("table" -> "TABLE1", "zkUrl" -> "phoenix-server:2181")
)

df
  .filter(df("COL1") === "test_row_1" && df("ID") === 1L)
  .select(df("ID"))
  .show

以下要点网址是使用Java的完整示例。

https://gist.github.com/mravi/444afe7f49821819c987

答案 2 :(得分:0)

在scala中,可以按照以下方式完成:

import org.apache.phoenix.spark._
val sqlContext = spark.sqlContext
val df1 =    sqlContext.read.format("jdbc").options(Map("driver" -> "org.apache.phoenix.jdbc.PhoenixDriver","url" -> "jdbc:phoenix:zk4-habsem.lzmf1fzmprtezol2fr25obrdth.jx.internal.cloudapp.net,zk5-habsem.lzmf1fzmprtezol2fr25obrdth.jx.internal.cloudapp.net,zk1-habsem.lzmf1fzmprtezol2fr25obrdth.jx.internal.cloudapp.net:2181:/hbase-unsecure", "dbtable" -> "table_name")).load();