【问题标题】:How to use Spark-Phoenix connection to run join queries on multiple tables?如何使用 Spark-Phoenix 连接在多个表上运行连接查询?
【发布时间】:2018-01-19 07:19:47
【问题描述】:

我想从 spark 连接到 apache phoenix 并运行 join sql 查询。按照凤凰官网的建议,他们给出了一个如何从spark连接凤凰的例子,但配置中需要单个凤凰表名。请参见下面的示例:

Map<String, String> map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", "TABLE_1");
Dataset<Row> df = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df.registerTempTable("TABLE_1");
Dataset<Row> selectResult = df.sparkSession().sql(" SELECT * FROM TABLE_1 WHERE COLUMN_1 = 'ABC' ");

在我的 phoenix-hbase 数据库中,我有两个表 TABLE_1TABLE_2,我想像这样运行一个 sql 查询:

SELECT * FROM TABLE_1 as A JOIN TABLE_2 as B ON A.COLUMN_1 = B.COLUMN_2 WHERE B.COLUMN_2 = 'XYZ';

如何使用 Phoenix-Spark 连接运行此查询?

【问题讨论】:

  • 分别加载两个数据集并在运行 sql 查询之前使用两次 registerTempTable 怎么样?
  • 嗨@Shaido,我按照你的建议试过了,效果很好......谢谢

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


【解决方案1】:

正如@Shaido 在评论部分所建议的那样,我尝试过并且它正在工作。我分别加载这两个数据集,然后将它们注册为临时表,现在我可以使用这两个表运行连接查询。下面是示例代码。

String table1 = "TABLE_1";
Map<String, String> map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", table1);
Dataset<Row> df = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df.registerTempTable(tableName);


String table2 = "TABLE_2";
map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", table2);
Dataset<Row> df2 = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df2.registerTempTable(table2);

Dataset<Row> selectResult = df.sparkSession().sql(" SELECT * FROM TABLE_1 as A JOIN TABLE_2 as B ON A.COLUMN_1 = B.COLUMN_2 WHERE B.COLUMN_2 = 'XYZ' ");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2023-04-06
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多