【问题标题】:Spark Cassandra Connector - not able to fetch dynamic columnsSpark Cassandra 连接器 - 无法获取动态列
【发布时间】:2014-12-28 07:41:52
【问题描述】:

我有一个包含很多动态列的 cassandra 列族。我正在运行一个简单的 Spark-Cassandra 连接器示例,我试图从该表中获取所有数据。问题是它没有从我的列族中获取任何动态列。

在我的示例和下面的代码 sn-p 中,它能够获取所有行的主键和二级索引列,但不能获取任何其他列(它有 30 多个动态列)。根据我在此处的阅读 (Spark Datastax Java API Select statements),到目前为止,我感觉连接器支持仅获取分区键和集群键作为列。有人可以确认我的理解是否正确。如果有人能建议如何解决这个问题,那就太好了?

/**
 * Loads a cassandra column family as a spark RDD.
 */
public static CassandraJavaRDD<CassandraRow> getCassandraTableRDD(
        JavaSparkContext context, String keyspace, String table)
{
    return javaFunctions(context).cassandraTable(keyspace, table);
}

CREATE TABLE source_product_canonical_data_sample (
  'key' text PRIMARY KEY,
  source text
) WITH
  comment='' AND
  comparator=text AND
  read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  default_validation=text AND
  min_compaction_threshold=4 AND
  max_compaction_threshold=32 AND
  replicate_on_write='true' AND
  compaction_strategy_class='SizeTieredCompactionStrategy' AND
  compression_parameters:sstable_compression='LZ4Compressor';

【问题讨论】:

    标签: cassandra apache-spark


    【解决方案1】:

    您的 CQL 表定义不知道您的“动态列”。没有包含集群列的复合主键。动态列/宽行是与旧的 thrift 数据模型相关的术语,在 CQL 中它们已被替换为复合主键。

    请参阅 Jonathan Ellis 撰写的这篇出色的博文,解释如何过渡到新的数据模型:http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows

    【讨论】:

    • 感谢@Piotr 引导我朝着正确的方向前进。根据您共享的链接,在 CQL 中我们似乎不能拥有动态列(单元格)本身,并且需要预先定义这些列。但对于我的用例,我想我可以使用地图集合将所有动态属性存储在地图列中。感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 2019-02-27
    • 1970-01-01
    • 2019-07-28
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多