Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉/拼花地板联合RDD_Cassandra_Apache Spark - Fatal编程技术网

Cassandra 卡桑德拉/拼花地板联合RDD

Cassandra 卡桑德拉/拼花地板联合RDD,cassandra,apache-spark,Cassandra,Apache Spark,我刚刚开始使用spark cassandra连接器,遇到了以下问题:我有一个数据集,部分在cassandra中,部分在HDFS中(完全相同的模式)。我想创建一个包含两个集合的UnionRDD,并从那里开始 到目前为止,我的代码是这样的: DataFrame df = sqlContext.parquetFile("foo.parquet"); JavaRDD cassandraRDD = (JavaRDD)javaFuntions(sc).cassandraTable("foo_ks","foo

我刚刚开始使用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不能转换为spark.sql.Row,这是来自applySchema调用…这并不奇怪。什么样的方法才能让它正常工作?(我的最终目标是联合df和cassandraDF)


我正在使用Spark 1.3.1和cassandra Spark的主分支的构建来尝试这一点。

最简单的方法是编写一个映射函数,该函数将

  • 卡桑德拉街
  • 源架构对象
  • 目标模式对象
  • 此映射函数将

  • 使用源模式读取cassandra行(并处理问题,如填充缺少的列、抑制具有某些数据质量问题的行等)
  • 将cassandra模式转换为spark sql模式(这是一个静态映射,其中包含cassandra类型到sql类型)
  • 返回具有目标架构的SQL行对象
  • 所以,你应该能像我一样

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


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

    如果出现异常,则首先打印模式并与cassandraRDD的字段进行比较。感谢ayan——我希望不必手动编写c2r,因为我的行有70多个字段……这些字段已经在cassandra中键入。我会把你的答案标记为被接受,因为我也不认为有更简单的方法……好吧,你可能不需要“手工”完成。您可以打开一个单独的JDBC连接并从Cassandra获取模式信息。然后你可以在c2r中使用它。这样,即使模式发生更改,也不需要更改代码。核心点是,是的,我们必须告诉spark关于模式的事情。顺便说一句,新的卡桑德拉连接器出炉了,或者我听说了。你可以/应该看看。。。。