使用Spark下的corr计算皮尔森相似度Pearson时,报错Can only zip RDDs with same number of elements in each partition....

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

时间: 2024-12-08 09:36:38

使用Spark下的corr计算皮尔森相似度Pearson时,报错Can only zip RDDs with same number of elements in each partition....的相关文章

Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错

使用了极光推送的 jar 包项目在从 SVN 中检出后,假设不又一次对 jar 包和 Bulid Path 进行配置就会抛出 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 的错误,进行例如以下操作就可以消除这样的错误: 删除 libs 目录下的 jpush-sdk-release1.3.8.jar(极光推送的 jar 包),又一次在 libs 目录中增加  jpush-sdk-release1.3.8.ja

rdlc报表在vs2008下编辑正常,在vs2012上编辑就报错

最近我们的系统的开发工具由vs2008升级到了2012,由于系统中很多报表都是用rdlc来开发的,今天 遇到有报表需要改动的需求,就直接使用vs2012对rdlc报表进行了编辑,结果改完后,怎么预览报表都报错. 后来我通过vsts源代码管理器比较了编辑前后的报表文件,结果发现我只是改动其中的一个属性,但是vs2012 在编辑rdlc报表文件时,自动加入了很多属性和设置到了报表中,我只会撤销修改,然后用记事本打开要修改 的报表文件,然后在记事本中进行了微调,保存后测试,无任何问题. 但是使用vs2

intellj下打的jar包在linux服务器删执行报错

intellj下打的jar包在linux服务器删执行报错:http://blog.csdn.net/qq_25925973/article/details/53370501window下用解压工具打开jar包,删除META-INFO下的.SF .RSA文件,删除后上次到linux服务器上,用java jar xx.jar去执行 原文地址:http://blog.51cto.com/5731674/2087591

【HANA系列】SAP HANA计算视图(calculation views)使用RANK报错

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA计算视图(calculation views)使用RANK报错 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 Got unknown tag name 'viewAttributes'(cubeSchema -> calculationScenario -> calculation

node.js下用Express搭建服务器(内含多种坑爹报错解决方法)

如题 环境:windows 8 64bit\node.js v0.10.33 我觉得有必要说一下,我把node.js没有装在默认目录下,而是自定义路径 E:\Program\nodejs 我觉得我后来遇到的很多问题与此有关. 好,然后我就开心地打开node,在cmd下输入 npm install -g express 它就果不其然地报错了,确切的错误我没记得,百度了下好像是-g那个参数的问题(开始不知道这个参数什么意思,后来才明白,就是装到node_gloabl目录下),所以我就把-g去掉,cd

vsphere虚拟机下的Linux在线移除硬盘后的报错处理(基于LVM)

1)故障描述( vmware虚拟机,在线移除一块被设置为pv格式的硬盘后,提示unknown device错误): 说明:/dev/sdb1 /dev/sdc1 /dev/sdd1是组成/dev/vg_test/lvm_test的PV,这里我们模拟/dev/sdd1硬盘被直接断电了 [[email protected] mnt]# pvdisplay    /dev/sdd: read failed after 0 of 4096 at 0: Input/output error   /dev/

MRC模式下声明property属性为strong可能不会报错

定位了项目的一个问题,居然与strong有关系.首先说明一下项目是MRC内存管理的.一个NSDictionary变量在赋值一段时间后再次访问就会出现EXC_BAD_ACCESS错误,打印日志看了一下地址没变但是内容已经看不到,估计是野指针了,显然内存管理出现问题了.看这个变量的定义,是加了strong属性的,说明对应的m文件是ARC内存管理的.再在Build Phase里看这个文件有没有加-fobjc-arc选项,居然没有,加上就好了. 对于这个问题,我想着Xcode应该会对MRC模式下使用st

记一次springboot下maven工程方式导入pom.xml首行报错

今天maven工程pom.xml报错,错误类型unkown,没有任何提示信息,个人思路先检查一下配置文件的语法格式是否正确,本人因为之前也有类似错误经验,觉得应该是配置问题中的版本问题,最好能找下网上关于该涉及软件之间的版本支持情况,如果找不到可以尝试将版本号调小,还可以参考以前正确配置也是不错呢.我是一开始版本是2.1.5release这个版本改成2.1.4即不再报错了当然里面涉及版本以及只要配置的都可以尝试的调整一下,注意每次都刷新一下,以定位问题所在.<groupId>org.sprin

linux下启动dbca或netmgr类的图形界面报错解决

Xlib: connection to ":0.0" refused by server Xlib: No protocol specified …… 解决办法:  www.2cto.com exit 退到root用户下执行下面代码 Java代码 xhost local:oracle non-network local connections being added to access control list 屏幕会出现如下内容: www.2cto.com Java代码 non-ne