大数据项目(MTDAP)随想
Spark MLlib进行example测试的时候,总是编译不通过,报少包<Spark MLlib NoClassDefFoundError: org/apache/spark/ml/param/Param>,但是代码没有报错,也能够跳转过去,我重新Maven刷过,程序还是启不来。后来观察到pom.xml中mllib是‘provided’的,去掉就好了。
原因就是provided是表示所在容器是包含这个包的,只会作用在编译、测试阶段;而默认的compile则是在编译、测试、运行阶段都需要的。
多动脑筋哈,乐趣就在其中。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.</artifactId>
<version>2.1.</version>
<scope>provided</scope>
</dependency>
/***********************************************************************************************/
IDEA下maven package打包报错,说某个jar包找不到或者什么not found: type、error: object xxx is not a member of package ... 一般这个jar包不是你通过maven关系管理的,或者是idea直接Libraries下from maven关联的,改用pom.xml文件引用可解决,反复试几次。本质原因不明.
/***********************************************************************************************/
Scala下JSON、Map、String的转换
1、使用astjson,使用与java相同的方式即可,甚至可以先在 .class文件中写好代码再复制到 .scala文件中,IDEA会自动帮人转换
期间 JSON.toJSONString(map) 出现错误:ambiguous reference to overloaded definition when call method in java library。 这是因为方法重载什么的,
必须明确确定参数个数改为JSON.toJSONString(map, SerializerFeature.PrettyFormat)
2、使用net.minidev.json
import net.minidev.json.JSONObject
import net.minidev.json.parser.JSONParser /*****生成JSONObject,赋值,并转成String************/
val obj: JSONObject = new JSONObject
obj.put("road_id",road_id)
obj.put("bpoint_id",bpoint_id)
obj.put("epoint_id",epoint_id)
val jsonStr = obj.toJSONString /*****解析Json字符串************/
val jsonParser =new JSONParser()
val result: JSONObject =
jsonParser.parse(opt.get).asInstanceOf[JSONObject]
result.get("road_id")
两种都可以吧,坑爹的是使用JSON过程中我遇到一个错误:com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.5.6 error
这个错误让我肯定以为是Spark中的Jackson与Json jar包中的Jackson产生冲突,然后我就把Json相关的代码全部删除,可一直报错,我都不敢肯定是否是fastJson的问题,我把fastJson的jar删除以后还是报错,哈哈哈,现在写博客的时候我终于找到原因了,原来是我没通过Maven管理的jar包中有smart-json-1.1.1,就是华为提供的FusionInsight相关的jar,然后我又从外界引用了smart-json-2.6。欸,所以以后最好都是用maven统一管理jar最好了。遇到问题多用脑子思考为什么,本质总是那么多,思考最核心的本质与原理。就像这个错误,是jar包冲突几乎肯定,那是哪几个包冲突呢,百度后不符合所我的需求,就可以再想想会不会是自己json引用过多冲突呢,多动脑子啊!多思考最本质的原理。
/***********************************************************************************************/
Scala和Java中的Infinity和NaN。
今天SparkStreaming处理数据进行reduce(_+_)相加的时候,发现有的结果是正确的数字,有的却是Infinity,无穷大,进一步打印<reduce((x, y) => println(x+y); x+y)> 发现会突然出现某个Infinity,然后后续一直都Infinity,之前的操作中有除法,也有赋值为0的情况,我想可能是num/0导致无穷大了,最本质的解决方法当然是去排除分母为0的情况,最快的解决方法是利用Double.isInfinity()方法来filter,而且Float包装类中是没有这个方法的。 随便说说NaN,这个常出现在JS中==判断的时候,比如a==1,当a不是数字的时候就会报NaN,Not a Number。
/***********************************************************************************************/
移动一行代码
- 将插入符号放在要移动的行上。
- 执行以下操作之一:
- 在主菜单上选择 代码| 向上移动(Code | Move Line Up)或 代码| 向下移动(Code | Move Line Down)。
- 按 Shift+Alt+Up 或 Shift+Alt+Down。
Maven仓库配置的时候本地是有密码的,需要配置进去(Server),实在报某些包找不到就直接手动添加
/***********************************************************************************************/
redis上传数据报错maxmemory:
当我将两千多万条数据,以一个Hash形式上传数据的时候报内存溢出,公司集群分配给Redis的内存是默认的1G,偏少,但是我的模式应该也有问题,我为了便于管理key,所有的同类型字典数据都使用一个key,比如
通过field进行精确查询。我觉得数据量总的来说没有达到临界值,但是redis是以一条key一条key这样上传的,所以一个key的数据量如此之大,估计因此吃不消了。
/***********************************************************************************************/
/***********************************************************************************************/
/***********************************************************************************************/
Map.Entry的作用(减少遍历map的次数)
3.由此便产生了遍历Map的两种方法:
3.1通过键的集合 间接遍历 map
Set<K> set = map.keySet();//先遍历map,取出所有的键。对map的第一次遍历。
Iterator it = set.iterator();//由此可以看出,这个方法实际是通过遍历键的集合来间接遍历map
while(it.hasnext()){
Object key = it.next();
Object value = map.get(key);//对map的第二次遍历。注意:getKey(key)也是需要通过传入的参数与所有的key一个一个的进行比较,直到找到Otherkey.equals(key)为true的OtherKey
...//当然,还得需要强转一下才能投入实际使用
}
3.2通过(Entry类的对象)组成的集合 间接遍历map
Set<Map.Entry<K,V>> set = map.entrySet();//遍历一次map,将所有的键值对一块取出。
Iterator it = set.iterator();
while(it.hasnext()){
Object key = it.getKey();
Object value = it.getValue();
...//当然,也得需要强转
}
两种遍历方法的比较:
3.1 与 3.2只是效率上的区别,由上面的注释就可以看出:
3.1对map进行了两次遍历。
3.2对map进行了一次遍历。
/***********************************************************************************************/
Redis中一个Hash可以存储40亿,Every hash can store up to 2^32 - 1 field-value pairs (more than 4 billion).《摘自Redis官网的Data type章节,意思是内存允许的情况下,可以存超过40亿数据》
/***********************************************************************************************/
Q:HBase和Solr的不同
hbase 是一个多元KV列存储数据库,可以快速读写,写性能尤为出色,这是一种基于MVCC的方案;
solr是基于lucene的企业级数据索引解决方案,但写入性能跟hbase比起来差个量级。所以一般用hbase存数据,solr作二级索引。
HBase可以通过协处理器Coprocessor的方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增、删、改索引的操作,这样就可以同时使用HBase存储量大和Solr检索性能高的优点了,更何况HBase和Solr都可以集群。这对海量数据存储、检索提供了一种方式,将存储与索引放在不同的机器上,是大数据架构的必须品。
Q:HBase和Redis的不同
两个不能互相替代,只能互相弥补,redis是基于内存的,而hbase基于hdfs
1、hbase:可以存储上亿的数据,适合存储大数据,可以基于rowkey扫描数据,作为大数据存储数据库的不错选择
2、redis:基于内存的,速度比hbase快,但是不能作为大数据存储,但是适合一些批量数据,快速读取,作为临时数据缓存的不错选择。
以上答案来自网络。
/***********************************************************************************************/
大数据项目(MTDAP)随想的更多相关文章
- 大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统
一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS ...
- 大数据项目测试<二>项目的测试工作
大数据的测试工作: 1.模块的单独测试 2.模块间的联调测试 3.系统的性能测试:内存泄露.磁盘占用.计算效率 4.数据验证(核心) 下面对各个模块的测试工作进行单独讲解. 0. 功能测试 1. 性能 ...
- 如何在IDEA里给大数据项目导入该项目的相关源码(博主推荐)(类似eclipse里同一个workspace下单个子项目存在)(图文详解)
不多说,直接上干货! 如果在一个界面里,可以是单个项目 注意:本文是以gradle项目的方式来做的! 如何在IDEA里正确导入从Github上下载的Gradle项目(含相关源码)(博主推荐)(图文详解 ...
- 大数据项目相关技术栈(Hadoop周边技术)
J2EE 框架Spring 开发框架 + SSH or SSM Lucene 索引和查询IKAnalyzer 分词Webmagic 爬虫 ETL工具:KettleSqoop 结构化数据库-hadoop ...
- 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)
一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...
- 华为大数据项目fusionInsight
项目简述:基于开源Hadoop2.0架构的集群网络,进行海量数据的分布式计算.由于Hadoop集群规模不断扩大,而搭建一个同等规模的测试集群需要一笔昂贵的开销.目前有100台左右物料,期望预测计算节点 ...
- 大数据项目之_15_电信客服分析平台_03&04_数据分析
3.3.数据分析3.3.1.Mysql 表结构设计3.3.2.需求:按照不同的维度统计通话3.3.3.环境准备3.3.4.编写代码:数据分析3.3.5.运行测试3.3.6.bug 解决 3.3.数据分 ...
- 大数据项目中的Oracle查询优化
今天发现自己之前写的一些SQL查询在执行效率方面非常不理想,于是尝试做了些改进. 需求为查询国地税表和税源表中,国税有而税源没有的条目数,之前的查询如下: SELECT COUNT(NAME) FRO ...
- 大数据项目中js中代码和java中代码(解决Tomcat打印日志中文乱码)
Idea2018中集成Tomcat9导致OutPut乱码找到tomcat的安装目录,打开logging.properties文件,增加一行代码,覆盖默认设置,将日志编码格式修改为GBK.java.ut ...
随机推荐
- [No000015C]计算机科学关键领域
- 【紫书】Ordering Tasks UVA - 10305 拓扑排序:dfs到底再输出。
题意:给你一些任务1~n,给你m个数对(u,v)代表做完u才能做v 让你给出一个做完这些任务的合理顺序. 题解:拓扑排序版题 dfs到底再压入栈. #define _CRT_SECURE_NO_WAR ...
- vue中的provide/inject的学习
在 Vue.js 的 2.2.0+ 版本中添加加了 provide 和 inject 选项.用于父级组件向下传递数据.provide/inject:简单的来说就是在父组件(或者曾祖父组件)中通过pro ...
- RabbitMQ的Q&A
默认的IP端口 amqp默认绑定IP(本机所有IP),端口:5672 clustering默认绑定IP(本机所有IP),端口:25672 RabbitMQ Management插件 (本机所有IP), ...
- 字母算术的python算法
据说Google出过一道题目:WWWDOT – GOOGLE = DOTCOM. 其中每个字母代表一个数字,数字不能重复,而且最高位的数字不能为0. 像这样的谜题被称为cryptarithms或者字母 ...
- php之变量和常量
PHP中的变量用一个美元符号后面跟变量来表示.变量名是区分大小写的. 变量与PHP中其它的标签一样遵循相同的规则.一个有效的变量名有字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线. 按照 ...
- [development][c++] C++构造函数调用构造函数
构造函数调用构造函数是会问题的. 外层函数返回的内存, 与被调用的构造函数返回的内存并不是一个内存. 错误示例代码如下: msg_log(const char *name, const char* t ...
- 内部排序->选择排序->简单选择排序
文字描述 简单排序的基本思想是:每一趟在n-i+1(i=1,2,…,n)个记录中选取关键字最小的记录作为有序列表中的第i个记录. 示意图 略 算法分析 简单排序算法中,所需进行记录移动的操作次数较少, ...
- SQL row_number() over(partition by函数
1)row_number() over(partition by 列名1 order by 列名2 desc)的使用 表示根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函数计算的值就表示每 ...
- 【PyQt5-Qt Designer】QSpinBox-微调框
QSpinBox-微调框 QSpinBox类提供了一个微调框小部件. QSpinBox被设计为处理整数和离散值集合(例如,月份名称):使用QDoubleSpinBox 可以作为浮点数的调整. QSpi ...