SELECT TRANSFORM (clientid, devicemake, devicemodel)
USING 'streaming.py' AS
(clientid string, phoneLable string, phoneHash string)
FROM hivesampletable
ORDER BY clientid LIMIT 50;
基于Windows的HDInsight
添加文件wasb:///streaming.py
SELECT TRANSFORM (clientid, devicemake, devicemodel)
USING 'D:\Python27\python.exe streaming.py' AS
(clientid string, phoneLable string, phoneHash string)
FROM hivesampletable
ORDER BY clientid LIMIT 50;
配置单元用户可以通过脚本流式处理表来转换该数据: 添加文件replace-nan-with-zeros.py
下面是一个简单的Python脚本:
蜂巢和Python
Python可以通过HiveQL转换语句用作Hive中的UDF。例如,下面的HiveQL调用streaming.py文件中存储的Python脚本。
基于Linux的HDInsight
添加文件wasb:///streaming.py
基于Windows的HDInsight
添加文件wasb:///streaming.py
下面是这个例子的作用:
1.文件开头的add file语句将streaming.py文件添加到分布式缓存中,因此集群中的所有节点都可以访问该文件。
2.选择转换。。。USING语句从hivesampletable中选择数据,并将clientid、devicemake和devicemodel传递给streaming.py脚本。
3.AS子句描述streaming.py返回的字段
下面是HiveQL示例使用的streaming.py文件。
由于我们使用流式处理,此脚本必须执行以下操作:
1.从STDIN读取数据。这是通过在本例中使用sys.stdin.readline()实现的。
2.使用string.strip(line,“\n”)删除后面的换行符,因为我们只需要文本数据,而不需要行尾指示符。
3.进行流处理时,一行包含所有值,每个值之间有一个制表符。所以string.split(line,“\t”)可用于分割每个选项卡上的输入,只返回字段。
4.处理完成后,输出必须作为一行写入STDOUT,每个字段之间有一个制表符。这是通过使用print“\t”.join([clientid,phone_label,hashlib.md5(phone_label).hexdigest()]实现的。
5.这一切都发生在while循环中,循环将重复,直到没有读取行,此时break退出循环,脚本终止。
除此之外,该脚本只连接devicemake和devicemodel的输入值,并计算连接值的哈希值。很简单,但它描述了从配置单元调用的任何Python脚本应该如何工作的基本原理:循环、读取输入直到没有更多的输入、在选项卡处将每一行输入分开、处理、编写一行选项卡分隔的输出。
相关问题 更多 >
编程相关推荐