用于为spark Canssandra数据生成csv文件的脚本

时间:2017-03-22 22:38:01

标签: scala apache-spark cassandra

我想根据cassandra中表格的逻辑生成'csv'文件。

val df = sc.parallelize(Seq(("a",1,"abc@gmail.com"), ("b",2,"def@gmail.com"),("a",1,"xyz@gmail.com"),("a",2,"abc@gmail.com"))).toDF("col1","col2","emailId")

我想按照以下逻辑生成'csv'文件。 由于有3个不同的'emailid',我需要生成3个不同的'csv'文件。

以下3个不同查询的三个csv文件。

select * from table where emailId='abc@gmail.com' select * from table where emailId='def@gmail.com' select * from table where emailId='xyz@gmail.com' 我怎样才能做到这一点。任何人都可以帮助我。

版本: Spark 1.6.2 Scala 2.10

1 个答案:

答案 0 :(得分:1)

创建一个不同的电子邮件列表,然后迭代它们。迭代时,仅过滤匹配的电子邮件并将数据框保存到Cassandra。

import sql.implicits._
val emailData = sc.parallelize(Seq(("a",1,"abc@gmail.com"), ("b",2,"def@gmail.com"),("a",1,"xyz@gmail.com"),("a",2,"abc@gmail.com"))).toDF("col1","col2","emailId")
val distinctEmails = emailData.select("emailId").distinct().as[String].collect
for (email <- distinctEmails){
    val subsetEmailsDF = emailData.filter($"emailId" === email).coalesce(1)
    //... Save the subset dataframe to cassandra
}

注意:coalesce(1)将所有数据发送到一个节点。如果数据帧太大,这可能会产生内存问题。