在使用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. typora中的图片处理20200622

    typora中的图片处理20200622 食用建议 typora作为markdown的书写神器,一般习惯的流程是在typora中写完,然后复制粘贴到博客园中,然而,markdown中图片采用的是本地连 ...

  2. ImageLoader在ViewPage中的使用

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  3. 调用php命令出错

    调用php -v命令.php artisan route:list等命令均出现一下错误. MIB search path: c:/usr/share/snmp/mibsCannot find modu ...

  4. 在Ubuntu 16.04上编译OpenJDK8的源代码

    本文将详细介绍在Ubuntu16.04上对OpenJDK8进行编译. 1.准备编译环境 使用的操作系统为Ubuntu16.04,如果读者没有安装Ubuntu,可以在Windows上使用虚拟机的方式进行 ...

  5. Python-使用tkinter canvas绘制的电子时钟

    #!/usr/bin/env python # -*- coding: utf-8 -*- from tkinter import * import math import threading imp ...

  6. SQL循环遍历,删除表里某一列是重复的数据,只保留一条。

    DECLARE @tempId NVARCHAR(Max), @tempIDD uniqueidentifier WHILE EXISTS ( SELECT UserId FROM Users Gro ...

  7. Web前端开发未来的六大趋势

    说起Web前端开发想必你一定不会陌生,因为现在的前端开发学习的培训机构也是层出不穷.下面济南优就业IT培训给大家总结出了未来Web前端开发的六大趋势从中可以大致看出来Web前端未来的发展前景. 趋势一 ...

  8. nodejs 本地压缩jpg,png图片(nodejs)

    使用nodejs实现本地压缩jpg,png图片. 使用到的包 1.images   用于压缩jpg npm install images yarn add images 2.imagemin 用于压缩 ...

  9. 状压DP之中国象棋

    题目 传送们 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方 ...

  10. 区间DP之凸多边形的三角剖分

    题目 给定一具有N个顶点(从1到N编号)的凸多边形,每个顶点的权均已知.问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小? 输入 第一行 顶点数N(N<5 ...