Cassandra / Parquet union RDD

时间:2015-05-26 18:33:17

标签: cassandra apache-spark

我刚开始使用spark-cassandra连接器并遇到以下问题:我有一个部分位于cassandra的数据集,部分位于HDFS(相同的模式)。我想在这两组中创建一个UnionRDD并从那里开始。

到目前为止我的代码是这样的:

DataFrame df = sqlContext.parquetFile("foo.parquet");
JavaRDD cassandraRDD = (JavaRDD)javaFuntions(sc).cassandraTable("foo_ks","foo_table");
DataFrame cassandraDF = sqlContext.applySchema(cassandraRDD,df.schema());

我收到一个运行时错误,说CassandraRow无法转换为来自applySchema调用的spark.sql.Row ......这并不奇怪。什么是让这个工作的正确方法? (我的最终目标是联合df& cassandraDF)。

我正在尝试使用Spark 1.3.1和cassandra-spark的主分支构建。

1 个答案:

答案 0 :(得分:0)

最简单的方法是编写一个将采用

的地图函数
  1. Cassandra Row
  2. 源架构对象
  3. 目标架构对象
  4. 此地图功能

    1. 使用源架构读取cassandra行(并处理问题,例如填充缺失列,禁止包含某些数据质量问题的行等)
    2. 将cassandra架构转换为spark sql架构(这是一个静态映射b / w cassandra类型到sql类型)
    3. 返回具有目标架构的SQL Row对象
    4. 所以,你应该可以做llike

      cDF = cRDD.map(c2r).createDataFrame()// map将返回行,因此此处不需要applySchema

      基本上,我建议使用单个函数处理转换。一旦从cassandra数据“创建”DF,您就可以与任何其他DF联合。