[英]Write to Cassandra with writetime using dataframe in spark
我有以下代码:-
val kafkaStream = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics, StorageLevel.MEMORY_AND_DISK_SER)
val collection = kafkaStream.map(_._2).map(parser)
collection.foreachRDD(rdd =>
{
if (!rdd.partitions.isEmpty) {
try {
val dfs = rdd.toDF()
dfs.write.format("org.apache.spark.sql.cassandra").options(Map("table" -> "tablename", "keyspace" -> "dbname"))
.mode(SaveMode.Append).save()
} catch {
case e: Exception => e.printStackTrace
}
} else {
println("blank rdd")
}
})
在上面的示例中,我使用dataframe将spark流保存到cassandra。 现在,我希望df的每一行都应具有特定的写入时间,类似于此命令-
insert into table (imei , date , gpsdt ) VALUES ( '1345','2010-10-12','2010-10-12 10:10:10') USING TIMESTAMP 1530313803922977;
因此,基本上每一行的写入时间应等于该行的gpsdt列。 在搜索中,我找到了此链接,但它显示了RDD的示例,我想要类似的数据框用例-https: //github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md任何建议,谢谢
据我所知,DataFrame版本中没有这样的功能(有相应的JIRA: https ://datastax-oss.atlassian.net/browse/SPARKC-416)。 但是无论如何,您都有RDD,可以将其转换为DataFrame-为什么不按引用的链接中所述使用saveToCassandra
?
PS,您在检查是否为空时可能会遇到性能问题( http://www.waitingforcode.com/apache-spark/isEmpty-trap-spark/read )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.