package com.huawei.bigdata.spark.examples

import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.sql.types.DoubleType
import org.apache.spark.{SparkConf, SparkContext} /**
* Created by wulei on 2017/8/3.
*/
object PointCorrPredict {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("PointCorrPredict")
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("use vio_offsite")
//360111010002,360102029001
val dataFrame = sqlContext.sql("select kk_id,direct,day,hour,cnt,speed from kk_hour_scale").orderBy("day","hour")
val newDataFrame = dataFrame.filter("kk_id = '3601110100'and direct = '02'")
.orderBy(dataFrame("day").desc,dataFrame("hour").desc).select(dataFrame.col("cnt").cast(DoubleType)).limit(100)
.rdd.map(row=>row.getAs[Double]("cnt"))
/*val dd = newDataFrame.collect().take(3)
dd.foreach(println)*/
val destinationDataFrame = sqlContext.sql("select origin_kakou,destination_kakou from kk_relation ")
val newDestinationDataFrame = destinationDataFrame.filter("origin_kakou = '360111010002'").select("destination_kakou").collect()
for (i <- 0 until newDestinationDataFrame.length){
println(newDestinationDataFrame(i))
println(newDestinationDataFrame(i).toString().substring(1,11))
println(newDestinationDataFrame(i).toString().substring(11,13))
val tmpDataFrame = dataFrame.filter("kk_id = '"+ newDestinationDataFrame(i).toString().substring(1,11)
+"' and direct = '"+newDestinationDataFrame(i).toString().substring(11,13)+"'")
.orderBy(dataFrame("day").desc,dataFrame("hour").desc).select(dataFrame.col("cnt").cast(DoubleType)).limit(100)
.rdd.map(row=>row.getAs[Double]("cnt"))
//tmpDataFrame.foreach(row => println(row))
var correlationPearson: Double = Statistics.corr(newDataFrame,tmpDataFrame)//计算不同数据之间的相关系数:皮尔逊
println("\ncorrelationPearson:" + correlationPearson) //打印结果
}
println("11111") sc.stop()
}
}

实现代码如上,因为Statistics.corr(RDD[Double],RDD[Double]),所以SparkSQL读取后的数据生成的dataFrame必须转换,第一步是转换成RDD[Row],Row就相当于sql查询出来的一条数据,这里也转换过多次才成功,最后百度得到可以先.cast(DoubleType)的形式。问题自己接触的少,要先看本质,然后看API,然后看案例就快了。

很明显可以从问题的描述上看是组之间的元素个数对应不上,但我已经被Row=>Double转晕了头,没有静心思考琢磨,没有专注仔细的自我对话,导致自己盲目的修改代码,还依然从转换问题上改变,后来转念一想才醒悟,以此警戒自己。limit

最新文章

  1. 二进制包安装MySQL数据库
  2. windows下制作linux U盘启动盘或者安装优盘(转)
  3. c++ DISALLOW_COPY_AND_ASSIGN
  4. Java 第七天 动态代理
  5. MFC中获取指针的方法
  6. BZOJ 1692: [Usaco2007 Dec]队列变换
  7. Swift学习之函数和简单地控件的创建
  8. Javascript设计模式系列三
  9. setTranslucent
  10. webpack初步介绍
  11. JS 三目运算符和RETURN
  12. CentOS 6.8下二级域名及目录的绑定
  13. CAS 4.0.x 自定义登录页面
  14. MySQL数据库的定时备份
  15. pyqt pyside 设置窗口关闭时删除自身
  16. @property用法总结
  17. ATM-JAVA程序 //程序有5处相同错误,找不出原因 转账功能没有实现,修改密码来不及实现了
  18. (转)Java调用Weservice
  19. 体会 git 之优越性
  20. Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点

热门文章

  1. win10环境下搭建zookeeper伪集群
  2. python-----双色球实现(实例1)
  3. MVC 实用架构设计(〇)——总体设计
  4. [ovs][dpdk] ovs-dpdk, dpdk port 大量丢包
  5. 终于碰到iOS对象集合深拷贝的坑
  6. &lt;大话设计模式&gt;工厂模式,策略模式
  7. 内部排序-&gt;交换排序-&gt;起泡排序
  8. LeetCode 973 K Closest Points to Origin 解题报告
  9. pyinstaller-打包python程序为exe文件
  10. 用CSS来画空心三角形的方法