代码之家  ›  专栏  ›  技术社区  ›  Julias

如何在spark cassandra connector中设置列顺序

  •  0
  • Julias  · 技术社区  · 7 年前

    在spark中,我有一个固定顺序的数据帧:

    agg_id,agg_key,agg_val,req_num,clk_num
    

    在cassandra中创建类似表时,非键列的顺序不会保留:

    CREATE TABLE mytable (
       agg_id int,
       agg_key int,
       agg_val text,
       req_num bigint,
       clk_num bigint,
     PRIMARY KEY ((agg_id,agg_key), agg_val )
    ) WITH CLUSTERING ORDER BY (agg_val asc)
    

    因此,当我运行desc mytable时,它会显示错误的顺序(首先是clk_num,然后是req_num)

    ds.write
      .format("org.apache.spark.sql.cassandra")
      .options(Map(
        "keyspace" -> "online_aggregation",
        "table" -> cassOutTable) )
      .mode(SaveMode.Append)
      .save
    

    我的问题是如何在这里设置列名称? 我可以向选项映射添加一些属性吗?或者稍微更改代码,使其正常工作。 一个限制-DF本身没有更改(可能输出到多个源)

    1 回复  |  直到 7 年前
        1
  •  1
  •   user10744641    7 年前

    只需在写入前按所需顺序选择列

    ds
      .select("agg_id", "agg_key", ..., "clk_num")
      .write
      .format("org.apache.spark.sql.cassandra")
      .options(Map(
        "keyspace" -> "online_aggregation",
        "table" -> cassOutTable) )
      .mode(SaveMode.Append)
      .save
    
    推荐文章