将时间序列数据从 PySpark 传输到 Cassandra

Posted

技术标签:

【中文标题】将时间序列数据从 PySpark 传输到 Cassandra【英文标题】:Transfer time series data from PySpark to Cassandra 【发布时间】:2017-02-01 10:25:30 【问题描述】:

我有一个 Spark 集群和一个 Cassandra 集群。在 pyspark 中,我读取了一个 csv 文件,然后将其转换为 RDD。然后我遍历我的 RDD 中的每一行并使用映射器和减速器函数。我最终得到以下输出(出于演示目的,我将这个列表缩短了):

[(u'20170115', u'JM', u'COP'), (u'20170115', u'JM', u'GOV'), (u'20170115', u'BM', u'REB'), (u'20170115', u'OC', u'POL'), (u'20170114', u'BA', u'EDU')] 

我想遍历上面数组中的每一行,并将每个元组存储到 Cassandra 中的一个表中。我希望唯一的关键是日期。现在我知道我可以将这个数组变成一个数据帧,然后将它存储到 Cassandra (https://github.com/datastax/spark-cassandra-connector/blob/master/doc/15_python.md#saving-a-dataframe-in-python-to-cassandra) 中。如果我将列表转换为数据框,然后将其存储到 Cassandra 中,Cassandra 仍然能够处理它吗?我想我还没有完全理解 Cassandra 如何存储值。在我的数组中,日期是重复的,但其他值不同。

在 Cassandra 中存储上述数据的最佳方式是什么?有没有办法让我使用 python 将数据直接从 Spark 存储到 Cassandra?

【问题讨论】:

【参考方案1】:

早期版本的 DSE 4.x 支持 RDD,但当前 DSE 和开源 Cassandra 的连接器“仅限于 DataFrame 操作”。

PySpark with Data Frames

您说“我希望唯一的键是日期”。我假设您的意思是分区键,因为日期在您的示例中不是唯一的。可以使用日期作为分区键(假设分区不会太大),但您的主键需要是唯一的。

【讨论】:

以上是关于将时间序列数据从 PySpark 传输到 Cassandra的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 流式传输到 HBase

火花流到pyspark json文件中的数据帧

如何将数据从 PySpark 持久化到 Hive - 避免重复

将数据从 PySpark 加载到 Redshift 时如何执行列编码

PySpark 直接从 Kafka 流式传输

如何从本地目录中读取,kmeans 流式传输 pyspark