簡體   English   中英

如何使用spark-cassandra-connector實現LEFT或RIGHT JOIN

[英]How implement LEFT or RIGHT JOIN using spark-cassandra-connector

我有火花流工作。 我正在使用Cassandra作為數據存儲。 我有需要與cassandra表一起加入的流。 我正在使用spark-cassandra-connector,有一個很棒的方法joinWithCassandraTable ,據我所知,使用cassandra表實現內部聯接

val source: DStream[...] = ...
source.foreachRDD { rdd =>
  rdd.joinWithCassandraTable( "keyspace", "table" ).map{ ...
  }
}

因此,問題是如何使用cassandra表實現左外部聯接?

提前致謝

當前不支持此功能,但是有介紹該功能的票證。 如果您希望將來引入它,請對其進行投票。

https://datastax-oss.atlassian.net/browse/SPARKC-181

故障單中建議了一種解決方法

正如RussS提到的那樣,該功能在spark-cassandra-connector驅動程序中尚不可用。 因此,作為解決方法,我提出了以下代碼片段。

rdd.foreachPartition { partition =>
     CassandraConnector(rdd.context.getConf).withSessionDo { session =>
       for (
         leftSide <- partition;
         rightSide <- {
           val rs = session.execute(s"""SELECT * FROM "keyspace".table where id = "${leftSide._2}"""")
           val iterator = new PrefetchingResultSetIterator(rs, 100)
           if (iterator.isEmpty) Seq(None)
           else iterator.map(r => Some(r.getString(1)))
         }
       ) yield (leftSide, rightSide)
     }
   }

暫無
暫無

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

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