精华内容
下载资源
问答
  • 如何将不同的文件快速合并成一个文件?不停的keep,replace,merge与append,可以试着批量化处理。二、Stata命令//生成数据clear allset obs 7gen n=_ngen id=1 if n<3< span="">replace id=2 if 2repl...

    一、问题提出

    Id

    n

    1

    1

    1

    2

    2

    3

    2

    4

    2

    5

    3

    6

    3

    7

    如何将此类数据分成按id分类的数据?

    如何将不同的文件快速合并成一个文件?

    不停的keep,replace,merge与appendf8965bef64ab9f8b23e11ea0fc719f49.png,可以试着批量化处理。

    二、Stata命令

    //生成数据

    clear all

    set obs 7

    gen n=_n

    gen id=1 if n<3< span="">

    replace id=2 if 2 

    replace id=3 if 5

    bro id n

    save C:\Users\Arthur\Desktop\分类\TYPE.dta

    979072c39cd0c40277aa6f51d220fd52.png

      //拆分文件

    cd  C:\Users\Arthur\Desktop\分类

    forvalues i=1(1)3{

          dis `i'

          preserve

          keep if id==`i' 

          save out`i'.dta,replace

          restore

     }

    //当然你也可以一个文件一个文件的拆分保存,多个分类你会崩溃的。

    1f640d2eca02caad11cfb34198321cc3.png

    //合并数据

    cd  C:\Users\Arthur\Desktop\分类

    clear all

      forvalues f =1(1)3{

        dis `f'

        append using out`f'.dta

      } 

    //除了单个数据文件的append

    //也可以使用dsconcat进行样本追加

    dsconcat C:\Users\Arthur\Desktop\分类\out1.dta  C:\Users\Arthur\Desktop\分类\out2.dta  C:\Users\Arthur\Desktop\分类\out3.dta

    展开全文
  • 推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,...Fayson在前面的文章《如何在Hadoop中处理小文件》里面介绍了多种处理方式。在Impala表中使用小文件也会降低Impala和HDFS的性能,本篇文章Fayson主要...

    Fayson的github: https://github.com/fayson/cdhproject

    推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,或者扫描文末二维码。

    1.文档编写目的

    Fayson在前面的文章《如何在Hadoop中处理小文件》里面介绍了多种处理方式。在Impala表中使用小文件也会降低Impala和HDFS的性能,本篇文章Fayson主要介绍如何使用Impala合并小文件。

    内容概述:

    1.环境准备

    2.Impala合并小文件实现

    3.验证小文件是否合并

    测试环境说明:

    1.CM5.15.0和CDH5.14.2

    2.环境准备

    在这里测试Fayson准备了4张表,两个有数据的表ods_user和ods_user_256表,ods_user表的数据量大于Impala默认的Block(256MB)大小,ods_user_256表的数据量小于Impala默认的Block大小。
    在这里插入图片描述

    1.准备一个测试表ods_user,该表中有888个小文件,如下截图所示

    命令行查看该表下的数据文件:

    [root@cdh03 ~]# hadoop fs -ls /user/hive/warehouse/ods_user |wc -l
    [root@cdh03 ~]# hadoop fs -du -h /user/hive/warehouse/ods_user |more
    

    在这里插入图片描述

    2.准备测试表ods_user_256,该表有7个小文件,如下截图所示:
    在这里插入图片描述

    3.使用建表语句创建2个与ods_user表结构一致的表ods_user_temp和ods_user_256_temp

    [cdh01.fayson.com:25003] > create table ods_user_temp like ods_user;
    [cdh01.fayson.com:25003] > select * from ods_user_temp;
    [cdh01.fayson.com:25003] > create table ods_user_256_temp like ods_user;
    [cdh01.fayson.com:25003] > select * from ods_user_256_temp; 
    

    在这里插入图片描述

    3.Impala合并小于Impala Block的小文件

    1.执行如下脚本将ods_user_256表中的数据写入到ods_user_256_temp表中

    [cdh01.fayson.com:25003] > insert overwrite table ods_user_256_temp select * from ods_user_256;
    

    在这里插入图片描述

    查看ods_user_256_temp表数据文件数量

    [root@cdh03 ~]# hadoop fs -du -h /user/hive/warehouse/ods_user_256_temp
    

    在这里插入图片描述

    上图可以看到文件数量由原表的7个减少到3个但还是生成了多个小文件,这里应该跟Impala节点数有关。

    2.将ods_user_256_temp表中的数据再写回ods_user_256表中,注意在这一步Fayson会进行小文件合并操作,具体执行命令如下

    [cdh01.fayson.com:25003] > set NUM_NODES=1;
    [cdh01.fayson.com:25003] > insert overwrite table ods_user_256 select * from ods_user_256_temp;
    

    在这里插入图片描述

    在命令行查看ods_user_256表数据文件数量

    [root@cdh03 ~]# hadoop fs -du -h /user/hive/warehouse/ods_user_256
    

    在这里插入图片描述

    由上图可以看到ods_user_256表的文件数量被合并为1个了。

    4.Impala合并大于Impala Block的小文件

    1.执行如下脚本将ods_user表中的数据写入到ods_user_temp表中

    [cdh01.fayson.com:25003] > insert overwrite table ods_user_temp select * from ods_user;
    

    在这里插入图片描述

    查看ods_user_temp表数据文件数量

    [root@cdh03 ~]# hadoop fs -du -h /user/hive/warehouse/ods_user_temp
    

    在这里插入图片描述

    2.将ods_user_temp表中的数据再写回ods_user表中,注意在这一步Fayson会进行小文件合并操作,具体执行命令如下

    [cdh01.fayson.com:25003] > set NUM_NODES=1;
    [cdh01.fayson.com:25003] > insert overwrite table ods_user select * from ods_user_temp;
    

    在这里插入图片描述

    在命令行查看ods_user表数据文件数量

    [root@cdh03 ~]# hadoop fs -du -h /user/hive/warehouse/ods_user
    

    在这里插入图片描述

    由上图可以看到ods_user表生成了多个文件,但每个文件的大小在Impala默认的block大小范围内。

    5.总结

    1.在设置了NUM_NODES=1后,如果合并的数据量超过Impala默认的Parquet Block Size(256MB)大小时会生成多个文件,每个文件的大小在256MB左右,如果合并的数据量小于256MB则最终只会生成一个文件。

    2.通过设置NUM_NODES=1强制Impala使用一个节点Daemon来处理整个Query,因此最终只会输出一个文件到HDFS。

    3.在使用该配置项时会引起单个主机的资源利用率增加,导致SQL运行缓慢,超出内存限制或查询挂起等。

    4.该参数没办法设置超过1,即无论你有多少台机器,多大数据量,想使用该方法,也只能设置为1,让一台机器来慢慢帮你合并文件,所以该方法不是太实用,仅供参考。

    6.备注:NUM_NODES参数说明

    该参数用来限制执行查询作业的节点数,常见的场景是用于调试/debug查询的时候。它是一个数值类型,但只有两个值,默认是0即使用所有节点来执行查询,也可以设置为1即所有的查询子任务都会在coordinator节点上个执行。

    如果你在调试某个查询作业,怀疑是因为分布式计算才导致的执行时间较长,可以将NUM_NODES设置为1,从而可以校验同样的作业在单个节点上执行时是否问题依旧存在。当然也可以在执行INSERT或者CREATE TABLE AS SELECT加上这个参数的设置来解决小文件的问题,也即是本篇文章正文所分析的内容。

    注意:设置该参数会导致单台节点资源使用增加,从而影响集群上别的查询作业比如导致执行缓慢,hang住或者OOM。所以建议在开发/测试环境中使用,或者如果你的生产系统不是太繁忙的时候使用。


    为天地立心,为生民立命,为往圣继绝学,为万世开太平。

    推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
    在这里插入图片描述

    原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

    展开全文
  • 推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f 1 问题背景 目前集群存于一个非常不健康的状态,主要问题是小文件太多,单个DataNode的block数量阈值是500,000,而现在单个DataNode的block为2,631,218,...

    Fayson的github: https://github.com/fayson/cdhproject

    推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f

    1 问题背景

    目前集群存于一个非常不健康的状态,主要问题是小文件太多,单个DataNode的block数量阈值是500,000,而现在单个DataNode的block为2,631,218,约为阈值的5倍,现在所有DataNode都处于黄色不健康状态。

    小文件问题会直接带来NameNode的压力巨大,从而导致HDFS的稳定性,同时对HDFS日常的数据读写带来性能下降。目前已可以看到集群的NameNode频繁出现检查点告警问题。

    通过对集群中目前目录个数,文件大小,文件数量,Hive表数量,Hive数据库数量,Hive分区数量进行了详细的数据采集。发现主要是HDFS目录中的小文件太多,大量1KB的文件,甚至是小于1KB的文件;具体表现为:不论表与分区的数据量大小,当有分区时每个分区具有200个文件,当没有分区时每个表有200个文件,而许多表是小表,所以造成严重的小文件问题。

    解决此问题的方法主要为两个方面;一是从源头解决小文件问题,在导数的过程中对作业进行优化,以减少小文件的输出,此方法需要业务方解决;二是合并平台上已有的小文件;本问描写合并平台小文件的方案。

    2 原表情况

    通过对集群内的文件数量以及文件大小进行分析,小文件问题基本出现在hive表中;经过近一步分析,发现每个分区存在着200个小文件,可以将这些文件合并减少小文件数量从而缓解小文件问题。

    示例表test_part一共20行数据,以字段date_str为分区

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    共有五个分区
    在这里插入图片描述

    每个分区分别四个文件

    在这里插入图片描述

    3 执行流程

    执行流程总体如下:

    1、使用create table name like tb_name创建备用表,使得表结构保持一致;

    在这里插入图片描述

    2、配置支持merge等参数,并使用insert overwrite语句读取原表数据插入到备用表。

    在这里插入图片描述

    3、确认表数据一致后,删除原表,使用alter语句将备用表的表名修改为原表的表名。

    在这里插入图片描述

    4 方案描述

    新建备表,表结构与原表保持一致

    create table test_part_bak like test_part; 
    

    在这里插入图片描述

    在这里插入图片描述
    设置如下参数,使支持合并

    SET hive.merge.mapfiles = true;
    SET hive.merge.mapredfiles = true;
    SET hive.merge.size.per.task = 256000000;
    SET hive.merge.smallfiles.avgsize = 134217728;
    SET hive.exec.compress.output = true;
    SET parquet.compression = snappy;
    SET hive.exec.dynamic.partition.mode = nonstrict;
    SET hive.exec.dynamic.partition = true;
    

    在这里插入图片描述
    使用insert overwrite语句查询原表数据覆盖备表

    insert overwrite table test_part_bak partition(date_str) select * from test_part;
    

    在这里插入图片描述

    备用表数据和原表一致
    在这里插入图片描述
    删除原表,将备用表表名修改为原表名

    alter table test_part_bak rename to test_part;
    

    在这里插入图片描述
    合并后表数据没有变化

    在这里插入图片描述

    表结构一致
    在这里插入图片描述
    从HDFS文件系统可以看出,分区数量没有改变,每个分区的几个小文件已经合并为一个文件。

    在这里插入图片描述

    展开全文
  • input id="tags"> </div> </body> </html> </code></pre> <p>however what I want to do is.... <p>instead of this .... <pre><code> $rowData = $sheet->rangeToArray('A' . $...
  • 下面代码将选中文件上传的同时,将传送会话Id文件后缀、文件类型三个参数。 整个合并后的二进制流分成三部分,如下图。第一段用1个字节表示辅助信息的长度,当然,若第二段比较长,则可以用双字节来表示;第二段是...

    在上传文件的时候,往往需要传递当前用户的一些其它的辅助信息,在此提供一个将这些辅助信息合并入二进制文件中一起上传的方法。

    下面代码将选中文件上传的同时,将传送会话Id、文件后缀、文件类型三个参数。

    整个合并后的二进制流分成三部分,如下图。第一段用1个字节表示辅助信息的长度,当然,若第二段比较长,则可以用双字节来表示;第二段是辅助信息,这里用json格式的字符串转换成ASCII码数组来表示;第三段为选中文件的实际内容。


    页面及JavaScript代码如下:

    <input id="File" type="file"/>

    // 使用POST方式提交服务器
    function SendFileToServer(filename, filecontent) {
        $.ajax({
            type: "POST",
            url: "PictureService.svc/SendIdCardPicture",
            dataType: 'application/json; charset=utf-8',
            cache: false,
            processData: false,
            data: filecontent,
            success: function (data) {
                console.log(data);
            }
        });
    }
    
    // File控件选择一个文件时触发change后的函数
    $('#File').change(function (evt) {
        // 界面中有type=file的input控件
        if (evt.target.files.length > 0) {
            // 遍历所有type=file的input控件
            for (var i = 0; i < this.files.length; i++) {
                var file = this.files[i];
                var reader = new window.FileReader();
                // 定义执行下面reader.readAsArrayBuffer后触发的load事件的处理函数
                reader.onload = function (rResult) {
    
                    // 生成文件名
                    var filename = GetGUID();
    
                    // 设置一起传递的辅助信息,这里包含sessionId、 imageType、fileExtName三项数据
                    var obj = {};
                    obj.sessionId = $("#sessionId").val();
                    obj.imageType = 1;
                    obj.fileExtName = "png";
                    var jsonShop = $.toJSON(obj);
                    // 把字符串转换成由字符ASCII码组成的数组
                    var arr = Array.prototype.map.call(jsonShop, function (c) { return c.charCodeAt(0); });
                    // 在上述数组前面加入1个字符长度的数据,用以表示数组长度
                    arr.unshift(arr.length);
                                
                    // 创建一个全新的ArrayBuffer,长度为上述数组长度+文件长度
                    var buffer = new ArrayBuffer(rResult.target.result.byteLength + arr.length);
                    // 生成视图,因为只有在视图里才能读取和插入数据
                    var dataview = new DataView(buffer);
    
                    // 把数组推入视图
                    for (var i = 0; i < arr.length; i++) {
                        dataview.setUint8(i, arr[i]);
                    }
                                
                    // 因为rResult.target.result是ArrayBuffer类型,所以需要先转成视图才能读取里面的数据
                    var result = new DataView(rResult.target.result);
    
                    // 把文件每个字节推入视图
                    for (var i = 0; i < rResult.target.result.byteLength ; i++) {
                        dataview.setUint8(i + arr.length, result.getUint8(i));
                    }
                                
                    // 调用上传方法
                    SendFileToServer(filename, buffer);
                };
    
                // 读取文件,该方法会触发load事件,并将生成的ArrayBuffer赋予reader.result。
                reader.readAsArrayBuffer(file);
            };
        }
    });


    服务器端代码如下:

    [ServiceContract]
    public class PictureService
    {
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
        public bool SendPicture(Stream imageContext)
        {
            // 读取二进制数据
            byte[] m_Bytes = ReadToEnd(imageContext);
    
            // 获取第二段的长度
            int len = (int)m_Bytes[0];
    
            // 从二进制数据中复制出第二段数据
            byte[] data = new byte[len];
            Array.Copy(m_Bytes, 1, data, 0, len);
            // 将复制出的数据转换成字符串,然后通过jsonConvert反序列化为ImgInfo对象
            string Jsonstr = System.Text.Encoding.Default.GetString(data);
            ImgInfo imgInfo = JsonConvert.DeserializeObject<ImgInfo>(Jsonstr);
                
            // 读取图片文件数据
            byte[] Imagedata = new byte[m_Bytes.Length - 1 - len];
            Array.Copy(m_Bytes, 1 + len, Imagedata, 0, m_Bytes.Length - 1 - len);
    
            // 判断保存目录是否存在,若不存在则创建
            string filePath = @"D:\Image\";
            if (!System.IO.Directory.Exists(filePath))
            {
                System.IO.Directory.CreateDirectory(filePath);
            }
    
            // 生成文件名称
            string imageName = DateTime.Now.ToString("yyyyMMDDhhmmss.") + imgInfo.FileExtName;
                
            string imageFullPath = filePath + imageName;
    
            // 若文件已存在,则放弃
            if (!File.Exists(imageFullPath))
            {
                try
                {
                    // 将获取的二进制数据写入文件
                    System.IO.File.WriteAllBytes(imageFullPath, Imagedata);
                    imageContext.Close();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
    
        public byte[] ReadToEnd(System.IO.Stream stream)
        {
            long originalPosition = 0;
    
            if (stream.CanSeek)
            {
                originalPosition = stream.Position;
                stream.Position = 0;
            }
    
            try
            {
                byte[] readBuffer = new byte[4096];
    
                int totalBytesRead = 0;
                int bytesRead;
    
                while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
                {
                    totalBytesRead += bytesRead;
    
                    if (totalBytesRead == readBuffer.Length)
                    {
                        int nextByte = stream.ReadByte();
                        if (nextByte != -1)
                        {
                            byte[] temp = new byte[readBuffer.Length * 2];
                            Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
                            Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
                            readBuffer = temp;
                            totalBytesRead++;
                        }
                    }
                }
    
                byte[] buffer = readBuffer;
                if (readBuffer.Length != totalBytesRead)
                {
                    buffer = new byte[totalBytesRead];
                    Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
                }
                return buffer;
            }
            finally
            {
                if (stream.CanSeek)
                {
                    stream.Position = originalPosition;
                }
            }
        }
    
        public class ImgInfo
        {
            /// <summary>
            /// 文件类型:身份证、营业执照、上岗证、其它证书
            /// </summary>
            public int ImageType { get; set; }
    
            /// <summary>
            /// 文件扩展名
            /// </summary>
            public string FileExtName { get; set; }
    
            /// <summary>
            /// 会话Id
            /// </summary>
            public string SessionId { get; set; }
        }
    }



    展开全文
  • $ID= $feature[$x]['properties']['osm_id']; $numba='XXXXXXXXXXXX'; $instagram_URL = 'https://api.instagram.com/v1/media/search?lat='.$lats.'&lng='.$longs.'&distance=10&client_id='.$...
  • 一:要解决的问题 ... 网上类似问题及其解决见pandas如何将相同ID的字符串进行合并 说法一:如图所示,我们遇到的问题就是根据第一列的stu_id,进行具有相同stu_id的字符串进行合并。这是我...
  • 此参数还有另一个优点,如果你有一个同时包含字符串和数字的列,那么将其类型声明为字符串是一个好选择,这样就可以在尝试使用此列作为键去合并表时不会出错。 select_dtypes 如果必须在Python中进行数据预处理,...
  • 某一天,所有的开发文件已经在dev分支上,但是这时候,线上出了一个问题,需要及时修复,于是从master分支上,拉了一个bug分支,进行处理,master分支本应合并bug分支,结果合并了dev分支,而且还commit,并推到了远...
  • 如何合并多个commitId呢? 如何合并多个commitId 当然笔者在之前的Git专栏文章里面已经介绍了相关的方法,相信看了笔者的Git专栏后,就很容易知道其中的两种方案;第一种:git reset;第二种:git rebase;今天...
  • 在同一个pdbid的情况下(如:pdbid="1A1R"), 因为第3行的 ID=AC ,和第11行的 ID=CA 反序, 那么如何将 反序的ID对中的proBnd(第5行)和rnaBnd(第15行)合并, 同时rnaBnd(第7行)和proBnd(第13行)合并. 合并方式为若同"-"的...
  • 推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c...Fayson在前面的文章《0403-如何在Hadoop中处理小文件》和《0405-如何使用Impala合并文件》中介绍了什么是Hadoop中的小文件,以及常见的处理方法。这里Fayson...
  • 首先git add把修改的文件添加到git库: git add gtt92e/gt_misc_dev_service/gt_misc_dev_service.c 然后执行git commit --amend: git commit --amend 然后去掉当前的提交id,然后保存,退出即可。 git log -3看...
  • <div><p>各位好,下面是我的项目目录截图, common目录是第三方类库,...所得到的结果只是把JS目录下的所有文件合并到一个init.js的文件中,但并没有提取出id和依赖,所以是不成功的 ...
  • //JPG图像文件 VariantClear(&pvList); pRst->Update(); pRst->Close(); UpdateData(false); AfxMessageBox(_T("JPG图像保存成功!")); 在数据库中显示如下: ![图片说明]...
  • ``` 这是mian函数方法 System.out.println("shenqingshu"); List<String> mmList = new ArrayList();...求解,如何插入分页符,使每个文档都是从下一页开始,而不是跟着上一个文档空余的地方。
  • 本文以操作Excel单元格实现单元格合并、拆分功能为例,介绍如何创建程序并获取程序ID和key来配置程序账号信息,并调用接口提供的方法来实现单元格合并和拆分。具体可参考以下步骤:一、下载SDK及导入jar 下载后,...
  • 本文以操作Excel单元格实现单元格合并、拆分功能为例,介绍如何创建程序并获取程序ID和key来配置程序账号信息,并调用接口提供的方法来实现单元格合并和拆分。具体可参考以下步骤: 一、下载SDK及导入jar 下载后,...
  • git解决二进制文件冲突

    万次阅读 2015-12-22 11:18:14
    1.冲突的产生当我们向远程git服务器提交某一个文件的...文本文件冲突解决出现冲突时git不知道如何自动合并,需要我们解决冲突手动合并. 如果是文本文件,git会在有冲突的地方作上标记(如 HEAD >>> ==== <<< HASH_ID等),
  • 出现冲突时git不知道如何自动合并,需要我们解决冲突手动合并. 如果是文本文件,git会在有冲突的地方作上标记(如 HEAD >>> ==== <<< HASH_ID等),标记哪些是当前分支的修改,哪些是其他分支的修改....
  • WINCE的BIB文件解析

    2013-05-02 20:46:16
    BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像。所有的BIB文件会被合并成CE.bib文件,然后打包工具Romima
  • 对其如何打包 JS 文件有了更深的理解,希望通过这篇文章,能够帮助读者你理解: <ol><li>webpack 单文件如何进行打包?</li><li>webpack 多文件如何进行代码切割?</li><li>webpack1 ...
  • 我们在遇到合并冲突时候,有时候会用git pull --rebase 来解决冲突部分代码,但是这也意味着冲突部分代码可能会丢失, 那么丢失后如何找回代码: 打开.git/logs/HEAD文件, 里面有最近提交记录。 此时我们需找到在...
  • 在idea中如何使用git

    千次阅读 2017-03-24 11:31:38
    本文解决的问题:在idea中使用git如何进行版本回退,和如何进行分支的合并。  一、版本回退  1.右击这个项目或是某个具体的文件,使用show history查看版本的commit id 。      2.得到结果页面如下:双击...
  • 将用户行为表和歌曲艺人表以歌曲song-id作为关联,合并为一个大表。各列名称为第一到第五列与用户行为表的列名一致,第六到第十列为歌曲艺人表中的第二列到第六列的列名。输出文件名为exp2-2.csv。 3。按照艺人...
  • 作者:刘阳 内容:视频介绍如何解决SVN中代码冲突 视频地址:...如果两个人或是多个人对同一个文件操作的时候,同时对同一行代码做修改,那么合并(update)时会产生冲突。
  • 合并,同时离开工作树和索引仍然一团糟。 *“git format-patch”学习配置以设置默认值 它的--notes = 选项。 *显示具有潜在拼写错误的args的代码 解释为commit-ish已得到改进。 *“git clone --recurse-...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

如何合并id文件