使用Spark和Scala将平面文件转换为Cassandra数据模型

时间:2018-04-23 06:10:10

标签: scala apache-spark spark-dataframe spark-cassandra-connector

我使用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)]         

0 个答案:

没有答案