我使用Spark(数据框架)和Scala将平面文件转换为Cassandra数据模型进行存储。 Cassandra数据模型在每列内部都有很多冻结,很难实现。
尝试使用dataframe / dataset的多个选项没有解决,也不想使用RDD实现。
Cassandra数据模型
转移表
transferNumber - String
orderList - Frozen List -forder
forder Frozen
orderNumber TEXT
lineItem Frozen List -flineitem
flineitem冻结
lineitemid INT
trackingnumber Frozen List -ftrackingnumber
ftrackingnumber冻结
trackingnumber TEXT
期望数量INT
xList列表文本
yList LIST TEXT
DataFrame输出
[order1,10,tracking1,WrappedArray(xlist12,xlist13),null,transfer1]
[order1,20,tracking1,null,WrappedArray(ylist14),transfer1]
[order2,10,tracking2,null,WrappedArray(ylist15),transfer1]
数据框架架构
root
orderNumber: string (nullable = true)
lineItemId: integer (nullable = true)
trackingNumber: string (nullable = true)
xList: array (nullable = true)
element: string (containsNull = true)
yList: array (nullable = true)
element: string (containsNull = true)
transferNumber: string (nullable = true)
尝试代码
val groupByTransferNumber = lineItem.groupBy("transferNumber").agg(collect_set($"orderNumber".alias("order")))
输出:
root
transferNumber: string (nullable = true)
collect_set: array (nullable = true)
element: long (containsNull = true)
[transfer1,WrappedArray(order1,order2)]