簡體   English   中英

Cassandra使用Spark到Hive

[英]Cassandra to Hive using Spark

我有一個如下所示的cassandra表,並希望使用某些條件從cassandra中獲取記錄並將其放在配置單元表中。

卡桑德拉表(員工)條目:

 Id   Name  Amount  Time
 1    abc   1000    2017041801
 2    def   1000    2017041802
 3    ghi   1000    2017041803
 4    jkl   1000    2017041804
 5    mno   1000    2017041805
 6    pqr   1000    2017041806
 7    stu   1000    2017041807

假定此表列是數據類型字符串。 我們在蜂巢中也有相同的架構。

現在我想將2017041801至2017041804之間的卡桑德拉記錄導入到蜂巢或hdfs。 在第二次運行中,我將基於上一次運行提取增量記錄。

我可以使用以下語法將Cassandra數據加載到RDD中。

val sc = new SparkContext(conf)
val rdd = sc.cassandraTable("mydb", "Employee")

現在我的問題是我如何才能根據之間的條件過濾此記錄,並將過濾后的記錄持久保存在配置單元或配置單元外部表路徑中。

不幸的是,我的時間列不是cassandra表中的聚簇鍵。 因此,我無法使用.where()子句。

我是這個scala和火花的新手。 因此,請提供有關此過濾器邏輯或使用數據框實現此邏輯的其他更好方法的幫助,請告訴我。

提前致謝。

  1. 我建議使用Connector Dataframe API從C * https://github.com/datastax/spark-cassandra-connector/blob/master/doc/14_data_frames.md加載。
  2. 使用df.filter()調用謂詞
  3. saveAsTable()方法可將數據存儲在配置單元中。

這是您的案例的spark 2.0示例

val df = spark
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "Employee", "keyspace" -> "mydb" ))
  .load()
df.filter("time between 2017041801 and 2017041804")
  .write.mode("overwrite").saveAsTable("hivedb.employee");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM