一般来说我想要实现的目标: 我想我想从RDD中删除案例类,但保留RDD,我不确定如何做到这一点。
具体说明我要做的事情: 我想要实现的是将RDD的每一行转换为json。但是json只能是一个关键列表:值对。当我把它变成json的时候,我得到了
{"CCABINDeviceDataPartial":
{"Tran_Id":"1234weqr",
"TranData":{"Processor_Id":"qqq","Merchant_Id":"1234"},
"BillingAndShippingData":{"Billing_City":"MyCity","Billing_State":"State","Billing_Zip":"000000","Billing_Country":"MexiCanada","Shipping_City":"MyCity","Shipping_State":"State","Shipping_Zip":"000000","Shipping_Country":"USico"}
...
}
}
我想要的是
{"Tran_Id":"1234weqr",
"Processor_Id":"qqq",
"Merchant_Id":"1234",
"Billing_City":"MyCity",
"Billing_State":"State",
"Billing_Zip":"000000",
"Billing_Country":"MexiCanada",
"Shipping_City":"MyCity",
"Shipping_State":"State",
"Shipping_Zip":"000000",
"Shipping_Country":"USico"
...
}
我有一个我称之为父案例类的内容,如下所示:
case class CCABINDeviceDataPartial(Tran_Id: String, TranData: TranData,
BillingAndShippingData: BillingAndShippingData, AcquirerData: AcquirerData,
TimingData: TimingData, RBD_Tran_Id: String, DeviceData1: DeviceData1, ACS_Time: Long,
Payfone_Alias: String, TranStatusData: TranStatusData, Centurion_BIN_Class: String,
BankData: BankData, DeviceData2: DeviceData2, ACS_Host: String,
DeviceData3: DeviceData3, txn_status: String, Device_Type: String,
TranOutcome: TranOutcome, AcsData: AcsData, DateTimeData: DateTimeData)
现在TranData,BillingAndShippingData,AcquirerData和其他一些也是案例类。我认为这是为了绕过案例类的21或22元素限制。如果您“展开”所有内容,则总共有76个元素。
我唯一的工作思路是将案例类分解为数据框,然后将它们一次加入一个。这似乎有点繁琐,我希望有一种方法可以“压扁”RDD。我看过API documentation for RDDs,但看不到任何明显的东西。
附加说明
这就是我目前将内容转换为json的方式。 首先,我将RDD转换为带有
的数据帧def rddDistinctToTable(txnData: RDD[CCABINDeviceDataPartial], instanceSpark:SparkService,
tableName: String): DataFrame = {
import instanceSpark.sql.implicits._
val fullTxns = txnData.filter(x => x.Tran_Id != "0")
val uniqueTxns = rddToDataFrameHolder(fullTxns.distinct()).toDF()
uniqueTxns.registerTempTable(tableName)
return uniqueTxns
}
然后转换为json并使用
写入ElasticsearchsparkStringJsonRDDFunctions(uniqueTxns.toJSON)
.saveJsonToEs(instanceSpark.sc.getConf.get("es.resource"))
答案 0 :(得分:2)
快速简单的解决方案:
<ul>
<li ng-repeat="album in albums' ">
<input type="checkbox" ng-show="display[$index]" ng-click="changed($index)">
{{album.name}}
</input>
</li>
</ul>
展平记录(您可以使用点来访问select
等嵌套对象)df.select("somecolumn.*", "another.nested.column")
写为JSON