我使用Cassandra 2.0.9存储大量数据,让我们说100Gb,在一个列族中。我想快速将此数据导出为CSV。我试过了:
我使用具有快速存储,15 Gb RAM和4核的Amazon Ec2实例
对于从Cassandra到CSV的数据导出千兆字节有没有更好的选择?
答案 0 :(得分:4)
2020年更新:DataStax提供了一个称为DSBulk的特殊工具,用于从Cassandra(从Cassandra 2.1开始)和DSE(从DSE 4.7 / 4.8开始)加载和卸载数据。在最简单的情况下,命令行如下所示:
dsbulk unload -k keyspace -t table -url path_to_unload
DSBulk已针对加载/卸载操作进行了优化,并具有很多选项,包括从压缩文件导入/导出,提供自定义查询等。
答案 1 :(得分:3)
因为当你尝试从Cassandra导出一个包含数百万行的表时,使用COPY会非常具有挑战性,所以我所做的就是创建一个简单的工具来从cassandra表中获取chunk(paginated)的数据块并导出它是CSV。
使用datastax中的java库查看我的example solution。
答案 2 :(得分:1)
受@ user1859675答案的启发,这是我们如何使用Spark从Cassandra导出数据
val cassandraHostNode = "10.xxx.xxx.x5,10.xxx.xxx.x6,10.xxx.xxx.x7";
val spark = org.apache.spark.sql.SparkSession
.builder
.config("spark.cassandra.connection.host", cassandraHostNode)
.appName("Awesome Spark App")
.master("local[*]")
.getOrCreate()
val dataSet = spark.read.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "xxxxxxx", "keyspace" -> "xxxxxxx"))
.load()
val targetfilepath = "/opt/report_values/"
dataSet.write.format("csv").save(targetfilepath) // Spark 2.x
您需要在类路径中使用“ spark-cassandra-connector
”才能使其正常工作。
我使用的版本低于
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector_2.11</artifactId>
<version>2.3.2</version>