{"id":11,"data":[{"package":"com.browser1","activetime":60000},{"package":"com.browser6","activetime":1205000},{"package":"com.browser7","activetime":1205000}]}
{"id":12,"data":[{"package":"com.browser1","activetime":60000},{"package":"com.browser6","activetime":1205000}]}
......
,json里是app的激活時間,目的是分析每個app的總激活時間
我使用sparK sql解析 json
val sqlContext = sc.sqlContext
val behavior = sqlContext.read.json("behavior-json.log")
behavior.cache()
behavior.createOrReplaceTempView("behavior")
val appActiveTime = sqlContext.sql("SELECT data FROM behavior") // sql查詢
appActiveTime.show(100,100) // 打印dataFrame
appActiveTime.rdd.foreach(println) // 打印rdd
但是打印出來的dataFrame是這樣的
+----------------------------------------------------------------------+
| data|
+----------------------------------------------------------------------+
| [[60000,com.browser1], [12870000,com.browser]]|
| [[60000,com.browser1], [120000,com.browser]]|
| [[60000,com.browser1], [120000,com.browser]]|
| [[60000,com.browser1], [1207000,com.browser]]|
| [[120000,com.browser]]|
| [[60000,com.browser1], [1204000,com.browser5]]|
| [[60000,com.browser1], [12075000,com.browser]]|
| [[60000,com.browser1], [120000,com.browser]]|
| [[60000,com.browser1], [1204000,com.browser]]|
| [[60000,com.browser1], [120000,com.browser]]|
| [[60000,com.browser1], [1201000,com.browser]]|
| [[1200400,com.browser5]]|
| [[60000,com.browser1], [1200400,com.browser]]|
|[[60000,com.browser1], [1205000,com.browser6], [1205000,com.browser7]]|
rdd是這樣的
[WrappedArray([60000,com.browser1], [60000,com.browser1])]
[WrappedArray([120000,com.browser])]
[WrappedArray([60000,com.browser1], [1204000,com.browser5])]
[WrappedArray([12075000,com.browser], [12075000,com.browser])]
而我想把數(shù)據(jù)轉(zhuǎn)化成
com.browser1 60000
com.browser1 60000
com.browser 12075000
com.browser 12075000
.......
就是想要把rdd中每行的數(shù)組元素變成一行一個. 當(dāng)然也可以是其他易于分析的結(jié)構(gòu)
因為本人是spark和scala的初學(xué)者,所以試了好久都不成功,所以希望大家能指導(dǎo)我一下.
沒毛病.
根據(jù)你的原始的json,如果轉(zhuǎn)換成表結(jié)構(gòu)確實是這個格式,因為json里有兩個屬性,一個id,一個data,data是個列表,如果你不自己map,spark是不會知道你那個列表映射成表的結(jié)構(gòu)是什么樣子的
+--------------------+---+
| data| id|
+--------------------+---+
|[[60000, com.brow...| 11|
+--------------------+---+
所以如果你想以表的結(jié)構(gòu)展示你的json,需要自己map一下
val session = SparkSession.builder().config(sc).getOrCreate()
try {
val schema = StructType(Seq(
StructField("id", LongType),
StructField("package", StringType),
StructField("activetime", LongType)
))
val encoder = RowEncoder(schema)
val df = session.read.json("file:\\\\\\E:/anc.json")
.flatMap(new FlatMapFunction[Row, Row] {
override def call(r: Row): util.Iterator[Row] = {
val list = new util.ArrayList[Row]()
val datas = r.getAs[mutable.WrappedArray.ofRef[Row]]("data")
datas.foreach(data => {
list.add(Row(r.getAs[Long]("id"), data.getAs[Long](1), data.getAs[String](0)))
})
list.iterator()
}
}, encoder)
df.show()
最后表結(jié)構(gòu)為:
+---+------------+----------+
| id| package|activetime|
+---+------------+----------+
| 11|com.browser1| 60000|
| 11|com.browser6| 1205000|
| 11|com.browser7| 1205000|
+---+------------+----------+
你也可以在你
sqlContext.sql("SELECT data FROM behavior")
后進行map,關(guān)鍵點在那個列表想怎么展示
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。