使用Spark SQL进行Cassandra Join (Java)

我们知道,Cassandra这种NoSQL数据库,天生无法执行join的操作。 但是如果你手上刚好有一个Spark集群,那么就方便很多了。我们可以 在Spark SQL之中进行join的操作 。

本文基于Spark 2.x 进行操作。2.0以后,我们不再需要单独的定义JavaSparkContext / SparkConf 等对象,只需直接定义一个SparkSession即可。同时我们可以统一使用Dataset来对数据进行操作,在易用性、性能上面都很不错。

下面是链接Spark与Cassandra的相关代码:

public static SparkSessiongetSession(String taskName) { SparkSessionss = SparkSession.builder()     .master("spark://10.206.132.101:7077")     .appName(taskName)     .config("spark.cassandra.connection.host", "10.206.132.14,10.206.132.77")     .config("spark.driver.memory", "5G")     .config("spark.executor.memory", "18G")     .config("spark.cores.max", "72")     .getOrCreate(); ss.sparkContext().addJar("target/sparkstat-0.0.1-SNAPSHOT.jar"); return ss; } 

注意上面的第10行代码,我们最后需要打包成一个fat-jar,因此需要特别的addJar

当我们拿到SparkSession 之后,后面的事情就很简单了:

首先使用Cassandra的Spark-connector加载数据:

Map<String, String> options = Maps.newHashMap();
options.put("keyspace", KEYSPACE);
options.put("table", TB_USER_NORMAL_INFO);
 
SparkSessionss = ...
 
Dataset<Row> ds = ss.read().format("org.apache.spark.sql.cassandra").options(options).load(); 

在Java API之中,统一使用Dataset啦,其API与DataFrame兼容,因为DataFrame只是Dataset的别名。

拿到数据之中,就可以使用SQL进行操作了:

// 首先注册一个表
ds.createOrReplaceTempView("localtest");
 
// 然后调用sqlContext使用SQL
ds.sqlContext().sql("select * from localtest").show(); 

支持了普通的SQL,join操作自然也会支持了。 在此暂时略过~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值