spark总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
}

猜你喜欢

转载自blog.csdn.net/shytry/article/details/81092133