任何人都可以提供一些示例来从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的任何示例
答案 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的完整示例。
答案 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();