我有一个Spark集群和一个Cassandra集群。在pyspark中,我读取了一个csv文件,然后将其转换为RDD。然后,我遍历RDD中的每一行,并使用mapper和reducer函数。我最终得到了以下输出(为了演示的目的,我缩短了这个列表):
[(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中的最佳方式是什么?有没有一种方法可以让我使用python将数据直接从Spark存储到Cassandra?
早期版本的DSE 4.x支持RDD,但DSE和开源Cassandra的当前连接器"仅限于DataFrame操作"。
具有数据帧的PySpark
你说"我希望唯一的钥匙是日期"。我想你指的是parton键,因为日期在你的例子中并不是唯一的。使用date作为partion键是可以的(假设partiton不会太大),但主键需要是唯一的。