版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shytry/article/details/81092133
1、代码实现获取接口数据
def GetData(url:String):String={
val realURL:URL=new URL(url)
//打开和URL之间的连接
val conn:URLConnection=realURL.openConnection
//设置通用属性
conn.setRequestProperty("accept","*/*")
conn.setRequestProperty("connection","Keep-Alive")
conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;WindowsNT 5.1;SV1)")
conn.setRequestProperty("content-type","application/x-www-form-urlencoded;charset=GBK")
conn.setRequestProperty("appID","***")
conn.setRequestProperty("appKey","***")
val result=IOUtils.toString(conn.getInputStream,"UTF-8")
result
}
2、json形式转化为dataFrame
val temp=new JSONObject(getdata.GetData("url")).getString("column_name")
//可根据具体形式进行区分
.replaceAll("\\[|\\]","").replaceAll("\\},{","\\}&&\\{").split("&&")
.toList
var df=hivecontext.read.json(InitSparkContext.getSC().makeRDD(temp))
3、将dataFrame按某一字段分组,获取其他字段的所有元素,并去重
初始表如下
id | name1 | name2 |
1 | aaa | X1 |
1 | bbb | X2 |
1 | ccc | X3 |
2 | ddd | XN |
2 | eee | XM |
想要得到的结果表
id | name1 | name2 |
1 | aaa,bbb,ccc | X1,X2,X3 |
2 | ddd,eee | XN,XM |
解决方式:
dataframe.groupby(col("id")).agg(concat_ws(",",collectset(col("name1"))),concat_ws(",",collectset(col("name2"))))
4、获取不同时期的时间(去年,过去某一天)
def getTime():String={
var dataFormat:SimpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
var cal:Calendar=Calendar.getInstance()
//获取当前时间的前一年-------获取其他时间修改Calendar的参数即可
cal.add(Calendar.YEAR,-1)
var time=dateFormat.format(cal.getTime)
time
}