在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊。从hdfs上使用python获取parquet格式数据的方法(当然也可以先把文件拉到本地再读取也可以):
1、安装anaconda环境。
2、安装hdfs3。
conda install hdfs3
3、安装fastparquet。
conda install fastparquet
4、安装python-snappy。
conda install python-snappy
5、读取文件
##namenode mode: from hdfs3 import HDFileSystem from fastparquet import ParquetFile hdfs = HDFileSystem(host=IP, port=8020) sc = hdfs.open pf = ParquetFile(filename, open_with=sc) df = pf.to_pandas() ##返回pandas的DataFrame类型 ##HA mode: from hdfs3 import HDFileSystem from fastparquet import ParquetFile host = "nameservice1" conf = { "dfs.nameservices":"nameservice1", ...... } hdfs = HDFileSystem(host = host, pars = conf) ......
python访问HDFS HA的三种方法
python访问hdfs常用的包有三个,如下:
1、hdfs3
其实从安装便捷性和使用上来说,并不推荐hdfs3,因为他的系统依赖和网络要求较高,但是某些情况下使用hdfs3会比较方便,官网资料点这里。如上面介绍,IP直接访问namenode:
from hdfs3 import HDFileSystem hdfs = HDFileSystem(host=namenode, port=8020) hdfs.ls('/tmp')
HA访问:
host = "nameservice1" conf = {"dfs.nameservices": "nameservice1", "dfs.ha.namenodes.nameservice1": "namenode113,namenode188", "dfs.namenode.rpc-address.nameservice1.namenode113": "hostname_of_server1:8020", "dfs.namenode.rpc-address.nameservice1.namenode188": "hostname_of_server2:8020", "dfs.namenode.http-address.nameservice1.namenode188": "hostname_of_server1:50070", "dfs.namenode.http-address.nameservice1.namenode188": "hostname_of_server2:50070", "hadoop.security.authentication": "kerberos" } fs = HDFileSystem(host=host, pars=conf) ##或者下面这种配置 host = "ns1" conf = { "dfs.nameservices":"ns1", "dfs.ha.namenodes.ns1":"namenode122,namenode115", "dfs.namenode.rpc-address.ns1.namenode122":"nnlab01:8020", "dfs.namenode.servicerpc-address.ns1.namenode122":"nnlab01:8022", "dfs.namenode.http-address.ns1.namenode122":"nnlab01:50070", "dfs.namenode.https-address.ns1.namenode122":"nnlab01:50470", "dfs.namenode.rpc-address.ns1.namenode115":"nnlab02:8020", "dfs.namenode.servicerpc-address.ns1.namenode115":"nnlab02:8022", "dfs.namenode.http-address.ns1.namenode115":"nnlab02:50070", "dfs.namenode.https-address.ns1.namenode115":"nnlab02:50470", } hdfs = HDFileSystem(host = host, pars = conf)
2、hdfs
这种方法在使用的时候配置比较简单,官网资料也比较丰富,但是需要注意的是该API可以模拟用户访问,权限较大。IP直接访问:
import hdfs client = hdfs.client.InsecureClient(url="http://namenode:50070", user="hdfs")
HA访问:
import hdfs client = hdfs.client.InsecureClient(url="http://namenode1:50070;http://namenode2:50070", user="hdfs")
3、pyhdfs
安装命令:pip install PyHDFS
官网地址,直接访问:
import pyhdfs client = pyhdfs.HdfsClient(hosts="namenode:50070",user_name="hdfs")
HA访问
import pyhdfs client = pyhdfs.HdfsClient(hosts=["namenode1:50070","namenode2:50070"],user_name="hdfs")
补充知识:python spark中parquet文件写到hdfs,同时避免太多的小文件(block小文件合并)
在pyspark中,使用数据框的文件写出函数write.parquet经常会生成太多的小文件,例如申请了100个block,而每个block中的结果
只有几百K,这在机器学习算法的结果输出中经常出现,这是一种很大的资源浪费,那么如何同时避免太多的小文件(block小文件合并)?
其实有一种简单方法,该方法需要你对输出结果的数据量有个大概估计,然后使用Dataframe中的coalesce函数来指定输出的block数量
即可,具体使用代码如下:
df.coalesce(2).write.parquet(path,mode)
这里df是指你要写出的数据框,coalesce(2)指定了写到2个block中,一个block默认128M,path是你的写出路径,mode是写出模式,常用的是
"overwrite"和"append"。
以上这篇python读取hdfs上的parquet文件方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

python读取hdfs上的parquet文件方式的更多相关文章

  1. python 解析Hdfs上的数据文件

    python想直接读取hadoop上的文件内容,一番操作,头发掉了几根,也没能解析出来parquet文件类型的文件. 本博文简单讲解一下TEXTFILE文件格式的解析: 需要安装模块hdfs from ...

  2. 【Spark】Spark-shell案例——standAlone模式下读取HDFS上存放的文件

    目录 可以先用local模式读取一下 步骤 一.先将做测试的数据上传到HDFS 二.开发scala代码 standAlone模式查看HDFS上的文件 步骤 一.退出local模式,重新进入Spark- ...

  3. MapReduce读取hdfs上文件,建立词频的倒排索引到Hbase

    Hdfs上的数据文件为T0,T1,T2(无后缀): T0: What has come into being in him was life, and the life was the light o ...

  4. python读取hdfs并返回dataframe教程

    不多说,直接上代码 from hdfs import Client import pandas as pd HDFSHOST = "http://xxx:50070" FILENA ...

  5. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  6. Java读写hdfs上的avro文件

    1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...

  7. hadoop(十)hdfs上传删除文件(完全分布式七)|12

    集群测试 上传小文件到集群,随便选择一个小文件上传到hdfs的根目录 [shaozhiqi@hadoop102 hadoop-3.1.2]$ bin/hdfs dfs -put wcinput/wc. ...

  8. [Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD

    对HDFS 上的文件,采用绝对路径,来读取获得 RDD: In [102]: mydata=sc.textFile("file:/home/training/test.txt")1 ...

  9. spark读取hdfs上的文件和写入数据到hdfs上面

    def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.set("spark.master" ...

随机推荐

  1. Java解析apk、ipa图标,包名,应用名称,版本号

    参看:http://blog.csdn.net/moyanxuan_1993_2_24/article/details/53612001

  2. 都在讲DevOps,但你知道它的发展趋势吗?

    根据最近的一项集体研究,DevOps的市场在2017年创造了约29亿美元的产值,预计到2022年,这个数字将达到约66亿美元.人工智能的融入和安全性的融入,加上向自动化的巨大转变,可合理预测,在202 ...

  3. Spring IoC 自定义标签解析

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...

  4. 09 . Prometheus监控tomcat+jvm

    List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz redis_exporter-v0.30.0.linux-amd64.tar.gz 节点名 IP ...

  5. 二.5vue服务器展示

    1.展示服务器列表前端页面 (1)写视图模版views/resources/servers.vue <template> <div class="resources-ser ...

  6. CentOS7开机报错piix4_smbus ****host smbus controller not enabled

    vi /etc/modprobe.d/blacklist.conf 输入:blacklist i2c_piix4 保存退出::wq 重启:reboot (完)

  7. Django项目中集成第三方登录时出现的错误

    原以为是被反爬 没想到 总结:这里的http应该是https协议,以后要更加小心 了,不能犯这种低级错误

  8. 【线型DP】【LCS】UVA_10635 Prince and Princess

    嘤嘤嘤,我又来了,刚A完就写,这个沙雕题有丶恶心.                  ???时间4.11发现所有表情包都莫得了 题目: In an n×n chessboard, Prince and ...

  9. Qt_Demo3:实现棋盘

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=53 说明:实现一个8*8的棋盘,点击棋盘的任意位置显示一个表情,并打印出当前的坐标( ...

  10. 实现 (5).add(3).minus(2) 功能

    Number.prototype.add = function (number) { if (typeof number !== 'number') { throw new Error('请输入数字- ...