导航:首页 > 编程语言 > hive2python

hive2python

发布时间:2023-03-24 11:40:36

Ⅰ hive 调用python 写的udf 报错

你把print写在try里面当然会少数据。你应该try访问fields数组并更新fields[2]的值。另一方面,从功能点上亏弊来说,使用SQL函数nvl或coalesce就能实现,没必要写个UDF来悄段实现,你这销运族样做增加额外的IO消耗和工作量。如果一定要写UDF,建议少用print,改用标准输出实现:sys.stdout.write()。

Ⅱ 大数据开发常用的编程语言有哪些

1、Python语言
如果你的数据科学家不使用R,他们可能就会彻底了解Python。十多年来,Python在学术界当中一直很流行,尤其是在自然语言处理(NLP)等领域。因而,如果你有一个需要NLP处理的项目,就会面临数量多得让人眼花缭乱的选择,包括经典的NTLK、使用GenSim的主题建模,或者超快、准确的spaCy。同样,说到神经网络,Python同样游刃有余,有Theano和Tensorflow;随后还有面向机器学习的scikit-learn,以及面向数据分析的NumPy和Pandas。
还有Juypter/iPython――这种基于Web的笔记本服务器框架让你可以使用一种可共享的日志格式,将代码、图形以及几乎任何对象混合起来。这一直是Python的杀手级功能之一,不过这年头,这个概念证明大有用途,以至于出现在了奉行读取-读取-输出-循环(REPL)概念的几乎所有语言上,包括Scala和R。
Python往往在大数据处理框架中得到支持,但与此同时,它往往又不是“一等公民”。比如说,Spark中的新功能几乎总是出现在Scala/Java绑定的首位,可能需要用PySpark编写面向那些更新版的几个次要版本(对Spark Streaming/MLLib方面的开发工具而言尤为如此)。
与R相反,Python是一种传统的面向对象语言,所以大多数开发人员用起来会相当得心应手,而初次接触R或Scala会让人心生畏惧。一个小问题就是你的代码中需要留出正确的空白处。这将人员分成两大阵营,一派觉得“这非常有助于确保可读性”,另一派则认为,我们应该不需要就因为一行代码有个字符不在适当的位置,就要迫使解释器让程序运行起来。
2、R语言
在过去的几年时间中,R语言已经成为了数据科学的宠儿——数据科学现在不仅仅在书呆子一样的统计学家中人尽皆知,而且也为华尔街交易员,生物学家,和硅谷开发者所家喻户晓。各种行业的公司,例如Google,Facebook,美国银行,以及纽约时报都使用R语言,R语言正在商业用途上持续蔓延和扩散。
R语言有着简单而明显的吸引力。使用R语言,只需要短短的几行代码,你就可以在复杂的数据集中筛选,通过先进的建模函数处理数据,以及创建平整的图形来代表数字。它被比喻为是Excel的一个极度活跃版本。
R语言最伟大的资本是已围绕它开发的充满活力的生态系统:R语言社区总是在不断地添加新的软件包和功能到它已经相当丰富的功能集中。据估计,超过200万的人使用R语言,并且最近的一次投票表明,R语言是迄今为止在科学数据中最流行的语言,被61%的受访者使用(其次是Python,39%)。
3、JAVA
Java,以及基于Java的框架,被发现俨然成为了硅谷最大的那些高科技公司的骨骼支架。 “如果你去看Twitter,LinkedIn和Facebook,那么你会发现,Java是它们所有数据工程基础设施的基础语言,”Driscoll说。
Java不能提供R和Python同样质量的可视化,并且它并非统计建模的最佳选择。但是,如果你移动到过去的原型制作并需要建立大型系统,那么Java往往是你的最佳选择。
4、Hadoop和Hive
一群基于Java的工具被开发出来以满足数据处理的巨大需求。Hadoop作为首选的基于Java的框架用于批处理数据已经点燃了大家的热情。Hadoop比其他一些处理工具慢,但它出奇的准确,因此被广泛用于后端分析。它和Hive——一个基于查询并且运行在顶部的框架可以很好地结对工作。

Ⅲ 用python 实现 hive sql join和row_number

给定一个查询时间,找最近登录的用户

create temporary function row_number as "com.ai.hive.udf.util.RowNumberUDF";

select logint_time,username from 

( select ip,login_time,username from (

select ip ,select_time from a join select ip,login_time,username from b on(a.ip=b.ip and a.login_time

)t sort by login_time desc )p where row_number=1

import pandas as pd

import numpy as np

login_column_names = ['ip','dip','type','uri','time']

select_column_names = ['ip'逗衫,'dip','action','time']

df_login = pd.read_csv('login.txt',sep='\t',encoding='utf-8',header=None,names=login_column_names)

df_select = pd.read_csv('select.txt',sep='\t',encoding='utf-8',header=None,names=select_column_names)

df_login[['username','password','authPassword','submit']]= df_login['uri'].str.replace('j_username=','').str.replace('password=','').str.split('&',expand=True)

df_login

x=[1,2,3,6,7,8]

df_login.drop(df_login.columns[x], axis=1, inplace=True)

df_login

import time

# time.strptime(df_login['time'],"%Y-%m-%d %H:%M:%S")

df_login['time']

df_login['new_time']=0

a = 0

for x in df_login['困毕time']:

    print(int(time.mktime(time.strptime(x,"%Y-%m-%d %H:%M:%S.%f"))))

    df_login['汪指芹new_time'][a] =  int(time.mktime(time.strptime(x,"%Y-%m-%d %H:%M:%S.%f")))

    a=a+1

df_login['new_time']

import time

# time.strptime(df_login['time'],"%Y-%m-%d %H:%M:%S")

df_select['time']

df_select['new_time']=0

a = 0

for x in df_select['time']:

    print(int(time.mktime(time.strptime(x,"%Y-%m-%d %H:%M:%S.%f"))))

    df_select['new_time'][a] =  int(time.mktime(time.strptime(x,"%Y-%m-%d %H:%M:%S.%f")))

    a=a+1

df_select

df_on = df_select.merge(df_login,how='left',on=['ip'])

df_on

df_on['diff_time'] = df_on['new_time_x']-df_on['new_time_y']

df_on

df_on[df_on['diff_time']>=0]

#找时间最小的那个

df_on = df_on[df_on['diff_time']>=0]

df_on

df_on[['ip','time_x','username','diff_time']]

def min_time(df,n=3,column='diff_time'):

    return df.sort_index(by=column,ascending=False)[-n:]

df_on[['ip','time_x','username','diff_time']].groupby(['ip','time_x']).apply(min_time,n=1)

Ⅳ hive中如何调用python函数

ADD FILE /乱答稿home/taobao/dw_hive/hivelets/smoking/ext/tsa/hivesql/bjx_topic_t1/splitsysin.py.bak;
create table if not exists splittest_t1
(
topic_id string,
topic_title string,
topic_desc string,
biz_date string,
gmt_create string
) PARTITIONED BY(pt string)
row format delimited fields terminated by '\001'
lines terminated by '\n'哗孝举槐
STORED AS textfile;

select TRANSFORM(topic_id,topic_title,topic_desc,biz_date,gmt_create)
USING 'splitsysin.py'
as topic_id,topic_title,topic_desc,biz_date,gmt_create
from r_bjx_dim_topic_t1;

Ⅳ python连接hive的时候必须要依赖sasl类库吗

客户端连接Hive需要使用HiveServer2。HiveServer2是HiveServer的重写版本,HiveServer不支持多个客户端的并发请求。当前HiveServer2是基于Thrift RPC实现的。它被设计用于为像JDBC、ODBC这样的开发API客户端提供更好的支持。Hive 0.11版本引入的HiveServer2。

HiveServer2的启动

启动HiveServer2

HiveServer2的启动十分简便:

$ $HIVE_HOME/bin/hiveserver2

或者

$ $HIVE_HOME/bin/hive --service hiveserver2

默认情况下,HiverServer2的Thrift监听端口是10000,其WEB UI端口是10002。可通过来查看HiveServer2的Web UI界面,这里显示了Hive的一些基本信息。如果Web界面不能查看,则说明HiveServer2没有成功运行。

使用beeline测试客户端连接

HiveServer2成功运行后,我们可以使用Hive提供的客户端工具beeline连接HiveServer2。

$ $HIVE_HOME/bin/beeline

beeline > !connect jdbc:hive2://localhost:10000

如果成功登录将出现如下的命令提示符,此时可以编写HQL语句。

0: jdbc:hive2://localhost:10000>

报错:User: xxx is not allowed to impersonate anonymous

在beeline使用!connect连接HiveServer2时可能会出现如下错误信息:

12Caused by: org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous

这里的xxx是我的操作系统用户名称。这个问题的解决方法是在hadoop的core-size.xml文件中添加xxx用户代理配置:

123456789<spanclass="hljs-tag"><<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">name>hadoop.proxyuser.xxx.groups<spanclass="hljs-tag"></<spanclass="hljs-title">name><spanclass="hljs-tag"><<spanclass="hljs-title">value>*<spanclass="hljs-tag"></<spanclass="hljs-title">value><spanclass="hljs-tag"></<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">property><spanclass="hljs-tag"><<spanclass="hljs-title">name>hadoop.proxyuser.xxx.hosts<spanclass="hljs-tag"></<spanclass="hljs-title">name><spanclass="hljs-tag"><<spanclass="hljs-title">value>*<spanclass="hljs-tag"></<spanclass="hljs-title">value><spanclass="hljs-tag"></<spanclass="hljs-title">property></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

重启HDFS后,再用beeline连接HiveServer2即可成功连接。

常用配置

HiveServer2的配置可以参考官方文档《Setting Up HiveServer2》

这里列举一些hive-site.xml的常用配置:

hive.server2.thrift.port:监听的TCP端口号。默认为10000。

hive.server2.thrift.bind.host:TCP接口的绑定主机。

hive.server2.authentication:身份验证方式。默认为NONE(使用 plain SASL),即不进行验证检查。可选项还有NOSASL, KERBEROS, LDAP, PAM and CUSTOM.

hive.server2.enable.doAs:是否以模拟身份执行查询处理。默认为true。

Python客户端连接HiveServer2

python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla。官网的示例采用的是pyhs2,但pyhs2的官网已声明不再提供支持,建议使用impyla和pyhive。我们这里使用的是impyla。

impyla的安装

impyla必须的依赖包括:

Ⅵ python连接hive,怎么安装thrifthive

HiveServer2的启动

启动HiveServer2

HiveServer2的启动十分简便:

$ $HIVE_HOME/bin/hiveserver2

或者

$ $HIVE_HOME/bin/hive --service hiveserver2

默认情况下,HiverServer2的Thrift监听端口是10000,其WEB UI端口是10002。可通过http://localhost:10002来查看HiveServer2的Web UI界面,这里显示了Hive的一些基本信息。如果Web界面不能查看,则说明HiveServer2没有成功运行。

使用beeline测试客户端连接

HiveServer2成功运行后,我们可以使用Hive提供的客户端工具beeline连接HiveServer2。

$ $HIVE_HOME/bin/beeline

beeline > !connect jdbc:hive2://localhost:10000

如果成功登录将出现如下的命令提示符,此时可以编写HQL语句。

0: jdbc:hive2://localhost:10000>

报错:User: xxx is not allowed to impersonate anonymous

在beeline使用!connect连接HiveServer2时可能会出现如下错误信息:

Caused by: org.apache.hadoop.ipc.RemoteException:
User: xxx is not allowed to impersonate anonymous

这里的xxx是我的操作系统用户名称。这个问题的解决方法是在hadoop的core-size.xml文件中添加xxx用户代理配置:

<property> <name>hadoop.proxyuser.xxx.groups</name> <value>*</value></property><property> <name>hadoop.proxyuser.xxx.hosts</name> <value>*</value></property>

重启HDFS后,再用beeline连接HiveServer2即可成功连接。

常用配置

HiveServer2的配置可以参考官方文档《Setting Up HiveServer2》

这里列举一些hive-site.xml的常用配置:

hive.server2.thrift.port:监听的TCP端口号。默认为10000。

hive.server2.thrift.bind.host:TCP接口的绑定主机。

hive.server2.authentication:身份验证方式。默认为NONE(使用 plain SASL),即不进行验证检查。可选项还有NOSASL, KERBEROS, LDAP, PAM and CUSTOM.

hive.server2.enable.doAs:是否以模拟身份执行查询处理。默认为true。

Python客户端连接HiveServer2

python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla。官网的示例采用的是pyhs2,但pyhs2的官网已声明不再提供支持,建议使用impyla和pyhive。我们这里使用的是impyla。

impyla的安装

impyla必须的依赖包括:

Ⅶ Python 连接hive(Linux)

之所以选择基于Linux系统用Python连接hive,是因为在window下会出现Hadoop认证失败的问题。会出现执行python脚本的机器无目标hive的kerberos认证信息类似错误,也会出现sasl调用问题:

该错误我尝试多次,未能解决(有知道window下解决方案的欢迎留言),所以建议使用Linux系统。

VMware Workstation +Ubuntu

网上教程很多,本文推荐一个教程: https://blog.csdn.net/stpeace/article/details/78598333

主要是以下四个包:

在安装包sasl的过程会出现麻烦,主要是Ubuntu中缺乏sasl.h的问题,这里可以通过下面语句解决

这和centos有一些区别。

本文是基于本机虚拟机用Python连接的公司测试环境的hive(生产环境和测试环境是有隔离的,生产环境需要堡垒机才能连接)

因缺乏工程和计算机基础的知识,对很多的地方都了解的不够深入,欢迎大神指点,最后向以下两位大佬的帖子致谢:
[1] https://www.hu.com/question/269333988/answer/581126392
[2] https://mp.weixin.qq.com/s/cdFxkphMtJASQ7-nKt13mg

Ⅷ redcode=-1加载失败

在写MapRece程序时,在本地运行使用cat file.data | python mapper.py | sort k1,1 | python recer.py >result.data进行测试时,程序可以输出正确结果,程序运行正常,但是在编写shell脚本提交在hadoop集群进行运算时,出现了"PipeMapRed.waitOutputThreads(): subprocess failed with code 1"的报错,在查询解决方法的过程中,找到了稿并如下几种解决问题的思路:
1、输入输出文件没有读写权限,导致出现这个报凯脊错,但是我在查看自己的文件目录的权限,发现不是自己的文件权限问题,具体权限是否会导致这种问题,我也不太清楚,仅供参考;

2、不同机器的python的环境路径不同,这个我把程序都改成了#!/usr/bin/python,再次执行,发现同样没有解决问题,依然报同样的错误;

3、查询Stack Overflow上面有的说法是python程序可能有问题,这个说法我一开始是不赞成的,因为我已经本地测试通过的。

于是在这个问题上卡了两个小时,在找到如何将日志文件拖到本体的方法后,拖取命令如下: yarn logs -applicationId application_1519803790630_15391 > temp1.log ,其中的application_1519803790630_15391根据自己任务盯敬渗的名称替换,查看其中Traceback部分错误提示,发现是自己在本地写的一个包在集群上找不到,提示import错误。把import包中函数放入mapper程序后,再次运行,问题被解决!!!!!!!

故:遇到这种报错的解决思路:首先取到程序运行日志,再分析日志中出现错误的原因,据测试,这种报错基本是由于程序错误导致的!!!!即使本地测试通过,在提交hadoop执行后,一旦报错也要根据错误日志进行程序更改!

阅读全文

与hive2python相关的资料

热点内容
人妻哺乳电影 浏览:838
乐高解压器价格 浏览:560
云开发服务器价格表 浏览:979
d盘英雄时刻文件夹是什么 浏览:740
wordpress网址简洁导航源码 浏览:476
搞笑视频网 浏览:910
电影韩国美女爱情 浏览:14
手机在线看电影的网站 浏览:944
十部必看重生军婚小说 浏览:751
海上海下电影 浏览:876
何家驹演的全部电影 浏览:683
个人信息处理者加密 浏览:779
着名的p字开头的网站 浏览:421
大尺度bl电影有哪些 浏览:584
angelababy演的电影陈家沟 浏览:353
在线看日本片网站 浏览:584
风月小说by苏他txt下载 浏览:990
韩国爱人是谁演的 浏览:731
主角把自己母亲纳入后宫的小说 浏览:46
启示录女主角真生孩子 浏览:834