小编far*_*een的帖子

Cassandra/Spark 显示不正确的大表条目数

我正在尝试使用 spark 来处理大型 cassandra 表(约 4.02 亿个条目和 84 列),但得到的结果不一致。最初的要求是将一些列从这个表复制到另一个表。复制数据后,我注意到新表中的某些条目丢失了。为了验证我是否对大型源表进行了计数,但每次都得到不同的值。我在一个较小的表(约 700 万条记录)上尝试了查询,结果很好。

最初,我尝试使用 pyspark 进行计数。这是我的 pyspark 脚本:

spark = SparkSession.builder.appName("Datacopy App").getOrCreate() 
df = spark.read.format("org.apache.spark.sql.cassandra").options(table=sourcetable, keyspace=sourcekeyspace).load().cache() 
df.createOrReplaceTempView("data") 
query = ("select count(1) from data " ) 
vgDF = spark.sql(query) 
vgDF.show(10)
Run Code Online (Sandbox Code Playgroud)

Spark提交命令如下:

~/spark-2.1.0-bin-hadoop2.7/bin/spark-submit --master spark://10.128.0.18:7077 --packages datastax:spark-cassandra-connector:2.0.1-s_2.11 --conf spark.cassandra.connection.host="10.128.1.1,10.128.1.2,10.128.1.3" --conf "spark.storage.memoryFraction=1" --conf spark.local.dir=/media/db/ --executor-memory 10G --num-executors=6 --executor-cores=2 --total-executor-cores 18 pyspark_script.py
Run Code Online (Sandbox Code Playgroud)

上述火花提交过程需要大约 90 分钟才能完成。我跑了三遍,这是我得到的计数:

  • Spark 迭代 1:402273852
  • Spark 迭代 2:402273884
  • Spark 迭代 3:402274209

Spark 在整个过程中没有显示任何错误或异常。我在 cqlsh 中运行了三次相同的查询,再次得到不同的结果:

  • Cqlsh 迭代 1:402273598
  • Cqlsh 迭代 2:402273499
  • Cqlsh 迭代 …

cassandra apache-spark pyspark spark-cassandra-connector

3
推荐指数
1
解决办法
1480
查看次数