Alex‘s Blog

Coding My Life


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

csv文件导入hive表

发表于 2018-08-29 | 分类于 hive , 大数据 , BigData , Spark

一个典型的hive如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE EXTERNAL TABLE `model.unbounded_dmp_ad_tables_jd2_imei_test`(
`jd_pin` string COMMENT '京东pin',
`_c1` string COMMENT 'column1 name',
`_c2` string COMMENT 'column2 name',
`_c3` string COMMENT 'column3 name')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'/user/jd_ad/ads_model/P_and_G/result/mapped/tables_jd2_imei'
TBLPROPERTIES (
'mart_name'='jd_ad',
'transient_lastDdlTime'='1476148520',
'skip.header.line.count'='1');

重点说明如下:

  1. 因为每个csv文件都带有header,所以使用'skip.header.line.count'='1'来跳过header行。
  2. 字段间分隔符使用’\u0001’,使用pyspark时分隔符为sep=”\x01”

搭建spark本地开发环境

发表于 2018-07-06 | 分类于 Java , Python , 大数据 , BigData , Spark

准备条件

由于本人的开发机是win10,所以打算在本地搭建spark开发环境,以便于调试。由于目前公司使用的版本是spark-2.1.0,hadoop-2.7.1,所以在spark官网上下载的包为spark-2.1.0-bin-hadoop2.7,在hadoop官网下载hadoop-2.7.1包,然后将这两个包解压。(注意这两个包所在的路径不要有中文或是空格,要不然会出错!),另外还需要去下载对应Hadoop版本的winutils.ext工具,解压后放在~/hadoop-2.7.1/bin目录下,可下载地址为:https://github.com/steveloughran/winutils

阅读全文 »

解决浏览器缓存带来的问题

发表于 2018-06-28 | 分类于 技术 , 学习 , 前端 , 缓存

原由

每当更改了前端某些js,html等文件,并重新发布服务时总是得需要清理浏览器缓存,要不然无法正确显示页面。要想理解浏览器缓存的逻辑可参考这篇文章:浏览器缓存知识。

尝试做过一些修改比如参考我想转行之—-微信浏览器缓存 ,但是这些方法要么实现不够优雅过于麻烦,要么指标不治本。

阅读全文 »

解决JavaMail邮件出现base64乱码的问题

发表于 2018-04-26 | 分类于 技术 , 学习 , Java

问题

本机进行邮件发送没出现问题,但是放到某些linux环境中则出现邮件内容是现实base编码的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
------=_Part_3_2039075268.1524573999534
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

PHA+5ZGK6K2m5L+h5oGv5aaC5LiL77yaPGJyPumhueebriAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDvkv6Hmga88YnI+5ZGK6K2m5a6e5L2TIO+8mndpbmRv
d3Nf57qz566h5rWL6K+VPGJyPuWRiuitpuWQjeensCDvvJromZrmi5/mnLrnm67lvZXkuI3kuIDo
h7Q8YnI+5ZGK6K2mSUQgJm5ic3A7ICZuYnNwOyDvvJpjbS1hbGFybS0xMDxicj7lkYrorabmj4/o
v7Ag77ya6Jma5ouf5py6ICB3aW5kb3dzX+e6s+euoea1i+ivleW3sue7j+iiq+enu+iHs+aWh+S7
tuWkuSB2bSE8YnI+5ZGK6K2m57qn5YirIO+8muS4pemHjeWRiuitpjxicj7lkYrorabml7bpl7Qg
77yaMjAxOC0wNC0yNCAyMDo0NToyOTxicj48YnI+5aaC5pyJ55aR6Zeu77yM6K+35LiO57O757uf
566h55CG5ZGY6IGU57O744CCPC9wPg==
------=_Part_3_2039075268.1524573999534--

一开始以为是编码没设置好,但是本地测试或是在某些linux环境中测试都没问题。

阅读全文 »

CAS(Compare and Swap) 原理学习

发表于 2017-12-28 | 分类于 技术 , 学习 , Java , 并发

最近打算学习CAS的相关原理,所以转载了一下两篇文章:

浅谈CAS(Compare and Swap) 原理

CAS(Compare and Swap)理解

什么叫CAS(Compare and Swap)?

硬件同步原语!! 什么蛋疼的名字,一般人很难理解。根据英文全称翻译==比较与交换,这个名字大致还能理解一点,目前先暂且这么理解吧.

阅读全文 »

Java并发学习笔记

发表于 2017-12-26 | 分类于 技术 , 学习 , Java , 并发

并发基础

synchronized关键字
  1. 对某个对象加锁
  2. 当修饰静态方法或是代码块时,表示对Class对象加锁。
  3. 同步和非同步方法可以同时调用。
  4. 一般情况下要对读方法和写方法同时加锁,要不很可能会出现脏读问题。
  5. 一个同步方法可以调用另外一个同步方法,一个线程已经拥有某个对象的锁,再次申请的时候仍然会得到该对象的锁,synchronized获得的锁是可重入的。
  6. 程序在执行过程中,如果出现异常,默认情况锁会被释放。
  7. 同步代码块中的语句越少越好。
  8. 锁定某对象o,如果o的属性发生改变,不影响锁的使用,但是如果o变成另外一个对象,则锁定的对象发生改变,应该避免将锁定对象的引用变成另外的对象。
  9. 不要以字符串常量作为锁定对象,因为你的程序和你用到的类库不经意间使用了同一把锁,比如相同的字符串常量。
volatile关键字

volatile只能保证可见性,但是不保证原子性。

  1. volatile并不能保证多个线程共同修改同一变量时所带来的不一致问题,也就是说volatile不能替代synchronized。
  2. nchronized可以保证可见性和原子性,volatile只能保证可见性。
阅读全文 »

记一次combogrid使用的采坑经历

发表于 2017-11-27 | 分类于 技术 , 学习 , 前端 , js , EasyUI , Combo , Datagrid , Combogrid , 问题

缘由

项目需要combogrid来实现下拉列表,并且实现select下拉框刷选下拉列表内容的功能。查了官方文档,好像没有介绍combogrid添加toolbar的例子,但是看到combogrid继承了combo和datagrid,那好,应该是可以使用。

问题

combogrid成功添加了toolbar实现了相关功能。但是问题来了。

  1. 当我切换到别的页面,再切回来时,发现toolbar的select框选择无效了,筛选的参数是上一次最后操作的参数,只能刷新整个浏览器页面才能生效。
  2. 当我切换到别的页面时,按F12输入$("#tb")竟然生效,id为tb的div竟然成了全局div。当输入$("[id=tb]").length是返回的结果不只是1,会随着切换次数的增加加1。
  3. 当我连着初始化combogrid两次是,toolbar竟然出现了一模一样的两个。

为什么出现这种问题,由于本人前端水平有限,一时半会也找不出答案,只能简单暴力地解决问题!

解决方案

  1. 初始化两次combogrid,使得出现两处toolbar。如果只是初始化一次那么toolbar只是出现一次,但是[id=tb]").length的长度还是会大于1,实际上可删除的id为tb的div只有一处,那么再删掉就没意义了。

  2. 连续两次初始化完之后,接着加入以下逻辑

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       init : function() {
    // 初始化账期控件,注意:必须初始化两次
    initComboBoGrid();
    initComboBoGrid();
    $("[id=tb]").each(function(index,element){
    if(0 != index){
    element.remove();
    }
    });
    $("#tb").show();
    }

没办法,只能简单暴力解决!

Java中返回一年中某一周的第一天

发表于 2017-11-25 | 分类于 Java , Calendar , 问题 , 后台

实现这样一个功能,根据前端的日历组件向后台传回某一年的第几周的开始日期和结束日期,日历组件的展示的日历周是以周日开始周六结束。
但是当直接设置Java中Calendar对象中的年数和周数时,返回这一周第一天(周日)的日期总是对不上。后来经过同事的帮忙总与解决了,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 获取某一周的起始时间
public static Calendar getFirstDayOfWeek(int year, int week) {

Calendar firDay = Calendar.getInstance();

//firDay.setFirstDayOfWeek(Calendar.SUNDAY);
// 先滚动到该年
firDay.set(Calendar.YEAR, year);
// 滚动到周
firDay.set(Calendar.WEEK_OF_YEAR, week - 1);

firDay.set(Calendar.DAY_OF_WEEK, 0);
//1天
firDay.add(Calendar.DAY_OF_YEAR, +1);
return firDay;
}

EasyUI layer.tips位置出错问题解决

发表于 2017-11-16 | 分类于 技术 , 学习 , 前端 , js , EasyUI , Combo , Datagrid , Combogrid , 问题

EasyUI layer.tips位置出错问题解决

当在划出窗口或是弹出面板中使用layer.tips时,老是出现tips位置错误的问题。感觉是给layer.tips提供的id位置应该不是当前窗口或是面板的上的id。

在同事的建议下直接把当前对象的this参数传进来单做id,这样就解决问题了。代码片段如下:

1
2
3
4
operation =  '<a href="javascript:;" class="btn btn-link btn-xs" onmouseover="showTestTooltip(\''
+ tipStr + "','" + row.id +'\',this);" onmouseout="hideTestTooltip(this);">'
+ "tip" + '</a>';
return operation;
阅读全文 »

使用easyUI组件combogrid面板相关问题

发表于 2017-11-15 | 分类于 技术 , 学习 , 前端 , js , EasyUI , Combo , Datagrid , Combogrid , 问题

问题

使用combogrid组件时,弹出的面板宽度总是与数据框的长度一样,并不是想官方demo那样弹出理想的宽度。各种属性各种设置也没解决问题,网上找了好久也没有找到答案。

解决

后来继续翻官方demo,发现了一个属性,试了一下成功了。属性如下:

1
panelMinWidth : '50%',

还得加入fix:true,属性,使得表格大小与面板一致
设置值为:50%。

下来面板中加入输入框

因为combogrid继承combo以及datagrid,因此可是使用combo以及datagrid的特性。通过”toolbar”属性可以引入输入框形成组合查询。

注意问题:在Firefox浏览器中可能会出现数据框加载显示效果问题,可以先默认隐藏输入框,再在列表初始化函数中通过js显示该输入框。

设置默认选中第一行

1
2
3
4
onLoadSuccess:function(){
//默认选中第一行
$('#billingReport_InvoiceTermComboBoxId').combogrid('grid').datagrid('selectRow',0);;
},
12345
Alex Wong

Alex Wong

不管年龄大小,每个人都是我的老师

46 日志
57 分类
55 标签
Links
  • shalk
  • luckylau
© 2020 Alex Wong
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4