在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本身没有更改(可能会输出到多个来源)
答案 0 :(得分:1)
只需在写入前按所需顺序选择列
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