标签: snappy

Snappy压缩仅返回SNAPPY_INVALID_INPUT

我在NSData上写了一个用libSnappy进行压缩的简短类别.它在压缩过程中就像一个魅力,但解压缩代码会产生SNAPPY_INVALID_INPUT.有趣的是,尽管Op-Code无效,但snappy仍然result用未压缩的数据填充我的缓冲区.有谁知道为什么snappy向我扔这个?

- (NSData*)dataBySnappyUncompression {
    NSMutableData *result = nil;
    if (self.bytes != NULL) {
        size_t uncompress_result = 0;
        snappy_status opCode = snappy_uncompressed_length(self.bytes, self.length, &uncompress_result);
        if (opCode == SNAPPY_OK) {
            result = [NSMutableData dataWithLength:uncompress_result];
            opCode = snappy_uncompress(self.bytes, self.length, [result mutableBytes], &uncompress_result);
            if (opCode == SNAPPY_OK) {
                [result setLength:uncompress_result];
                return result;
            }
        }
    }
    LEPLog(@"Failed snappy de-compress: tried to de-compress %lu bytes", self.length);
    NSAssert(nil, @"Failed Snappy de-compress");
    result = nil;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我应该注意,正在压缩/未压缩的数据是NSKeyedArchiver调用的结果.

nsdata snappy

5
推荐指数
0
解决办法
636
查看次数

在 hive 表上设置压缩

我有一个基于 avro 架构的配置单元表。该表是使用以下查询创建的

CREATE EXTERNAL TABLE datatbl PARTITIONED BY (date String, int time) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' WITH SERDEPROPERTIES ( 'avro.schema.url'='path to schema file on HDFS') STORED as INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION '<path on hdfs>'

到目前为止,我们一直通过设置以下属性向表中插入数据

hive> set hive.exec.compress.output=true; hive> set avro.output.codec=snappy;

但是,如果有人忘记设置上述两个属性,则无法实现压缩。我想知道是否有一种方法可以强制对表本身进行压缩,以便即使未设置上述两个属性,数据也始终会被压缩?

compression hive avro hiveql snappy

5
推荐指数
0
解决办法
8700
查看次数

为什么镶木地板对我而言对于hive中的文本文件格式较慢?

好!所以我决定使用Parquet作为hive表的存储格式,在我实际在集群中实现之前,我决定运行一些测试.令人惊讶的是,Parquet在我的测试中速度较慢,因为它比普通文本文件更快.

请注意,我在MapR上使用Hive-0.13

遵循我的操作流程

表A.

格式 - 文本格式

表大小 - 2.5 Gb

表B.

格式 - 镶木地板

表大小 - 1.9 Gb

[创建表格B作为选择*从A存储为镶木地板]

表C.

格式 - 带有快速压缩的镶木地板

表大小 - 1.9 Gb

[创建表格C存储为镶木地板tblproperties("parquet.compression"="SNAPPY")作为select*from A]

现在我对上面提到的表进行了一些测试并遵循了细节.

  • 行计数操作

表A.

地图 - 15

减少 - 1

累积CPU - 123.33秒

所需时间 - 59.057秒

表B.

地图 - 8

减少 - 1

累计CPU - 204.92秒

所需时间 - 50.33秒

  • 单行选择

表A.

地图 - 15

减少 - 0

累计CPU - 51.18秒

所需时间 - 25.296秒

表B.

地图 - 8

减少 - 0

累计CPU …

hadoop hive mapr snappy parquet

5
推荐指数
1
解决办法
1632
查看次数

使用Snappy压缩的Parquet格式的Redshift COPY命令

我在HDFS中有数据集,它采用镶木地板格式,并且有snappy作为压缩编解码器.就我的研究而言,目前Redshift只接受带有gzip,lzo压缩编解码器的纯文本,json,avro格式.

或者,我正在将镶木地板格式转换为纯文本,并使用Pig脚本将snappy编解码器更改为gzip.

目前有没有办法直接从镶木地板文件加载数据到Redshift?

compression amazon-s3 snappy amazon-redshift parquet

5
推荐指数
1
解决办法
1万
查看次数

以最小的中断将 mongodb 从 snappy 压缩切换到 zlib 压缩

我一直在 mongodb 中使用 WiredTiger 存储引擎的默认(snappy)压缩,并且我想切换到 zlib。但是,我的应用程序中已经有一些用户处于活动状态,并且数据库中有数据,我想确保以最小的中断进行此更改。默认情况似乎是简单地重新创建数据库,例如通过 mongodump 转储并使用 zlib 压缩选项恢复到新数据库,然后指向新数据库。如果我在没有用户处于活动状态时进行切换,那么这很可能会很好地完成任务,但我想知道是否有更好的方法来进行更改,例如实现与现有数据库?

如果它是有用的上下文,则对更好压缩的需求实际上只涉及部分数据。如果有一种方法可以仅为数据库中的某些文档切换到 zlib 压缩,那就太好了。另外,为了以防万一,我正在使用 perl MongoDB.pm。

PS 这是我第一次查询 stackoverflow。我已经寻找答案并尝试遵循适当的提问惯例,但如果我以错误的方式处理问题,请温和地教育我。:)

zlib mongodb snappy

5
推荐指数
0
解决办法
898
查看次数

关于java.lang.NoClassDefFoundError:无法初始化类org.xerial.snappy.Snappy

我尝试编译,测试和运行junit测试时出错.

我想使用DataFrames加载本地Avro文件,但我得到一个例外:

org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
Run Code Online (Sandbox Code Playgroud)

我根本不使用Cassandra,涉及的罐子的版本是:

<properties>
    <!-- Generic properties -->
    <java.version>1.7</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!--  Dependency versions -->
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <scala.version>2.10.4</scala.version>
    <junit.version>4.11</junit.version>
    <slf4j.version>1.7.12</slf4j.version>
    <spark.version>1.5.0-cdh5.5.2</spark.version>
    <databricks.version>1.5.0</databricks.version>
    <json4s-native.version>3.5.0</json4s-native.version>
    <spark-avro.version>2.0.1</spark-avro.version>
</properties>
Run Code Online (Sandbox Code Playgroud)

这些是依赖项:

<dependencies>

    <dependency>
        <groupId>org.json4s</groupId>
        <artifactId>json4s-native_2.10</artifactId>
        <version>${json4s-native.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.10</artifactId>
        <version>${spark.version}</version>
    </dependency>
    <dependency>
        <groupId>com.databricks</groupId>
        <artifactId>spark-csv_2.10</artifactId>
        <version>${databricks.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.xerial.snappy</groupId>
                <artifactId>snappy-java</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.xerial.snappy</groupId>
        <artifactId>snappy-java</artifactId>
        <version>1.0.4.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.databricks</groupId>
        <artifactId>spark-avro_2.10</artifactId>
        <version>${spark-avro.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

我试图用这个项目编译

mvn clean …

scala snappy apache-spark

5
推荐指数
1
解决办法
3209
查看次数

在 Apache Beam 中使用 Snappy 压缩写入镶木地板文件

我正在尝试使用 Snappy 压缩在 Apache Beam 中编写一个镶木地板文件,如下所示

records.apply(FileIO.<GenericRecord>write().via(ParquetIO.sink(schema)).to(options.getOutput()));
Run Code Online (Sandbox Code Playgroud)

我发现可以将AUTOGZIPBZIP2和设置为压缩,但我无法找到将其设置为 的方法,有什么想法如何做到这一点ZIP?作为参考,可以使用 wrting 到 avro,如下所示DEFLATESNAPPY

records.apply("writeAvro", AvroIO.writeGenericRecords(schema).withCodec(CodecFactory.snappyCodec()).to(options.getOutput()));
Run Code Online (Sandbox Code Playgroud)

snappy parquet apache-beam

5
推荐指数
1
解决办法
887
查看次数

如何读取扩展名为 .snappy.parquet 的文件

我有扩展名为 .snappy.parquet 的文件,需要将其读入 Jupyter 笔记本,并将其转换为 pandas 数据帧。

import numpy
import pyarrow.parquet as pq

filename = "part-00000-tid-2430471264870034304-5b82f32f-de64-40fb-86c0-fb7df2558985-1598426-1-c000.snappy.parquet" 
df = pq.read_table(filename).to_pandas()
Run Code Online (Sandbox Code Playgroud)

错误是:

ArrowNotImplementedError:不支持具有结构的列表

pandas snappy parquet

5
推荐指数
1
解决办法
2万
查看次数

sortWithinPartitions 是如何排序的?

将 sortWithinPartitions 应用于 df 并将输出写入表后,我得到了一个结果,但我不知道如何解释。

df
.select($"type", $"id", $"time")
.sortWithinPartitions($"type", $"id", $"time")
Run Code Online (Sandbox Code Playgroud)

结果文件看起来有点像

1 a 5
2 b 1
1 a 6
2 b 2
1 a 7
2 b 3
1 a 8
2 b 4
Run Code Online (Sandbox Code Playgroud)

它实际上不是随机的,但也不像我期望的那样排序。即,首先按类型,然后是 id,然后是时间。如果我尝试在排序之前使用重新分区,那么我会得到我想要的结果。但由于某种原因,文件的重量增加了 5 倍(100GB 与 20GB)。

我正在向 hive orc 表写入数据,并将压缩设置为 snappy。

有谁知道为什么它是这样排序的,以及为什么重新分区会得到正确的顺序,但尺寸更大?

使用火花2.2。

columnsorting snappy apache-spark orc

5
推荐指数
1
解决办法
9693
查看次数

升级火花时的镶木地板压缩退化

我有一个 spark 作业,它使用 snappy 压缩将数据写入镶木地板文件。parquet 中的一列是重复的 INT64。

当从带有 parquet 1.8.2 的 spark 2.2 升级到带有 parquet 1.10.1 的 spark 3.1.1 时,我目睹了压缩比的严重下降。

例如,对于这个文件(用 spark 2.2 保存),我有以下元数据:

creator:     parquet-mr version 1.8.2 (build c6522788629e590a53eb79874b95f6c3ff11f16c) 
extra:       org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"numbers","type":{"type":"array","elementType":"long","containsNull":true},"nullable":true,"metadata":{}}]} 

file schema: spark_schema 
--------------------------------------------------------------------------------
numbers:     OPTIONAL F:1 
.list:       REPEATED F:1 
..element:   OPTIONAL INT64 R:1 D:3

row group 1: RC:186226 TS:163626010 OFFSET:4 
--------------------------------------------------------------------------------
numbers:     
.list:       
..element:    INT64 SNAPPY DO:0 FPO:4 SZ:79747617/163626010/2.05 VC:87158527 ENC:RLE,PLAIN_DICTIONARY ST:[min: 4, max: 1967324, num_nulls: 39883]

Run Code Online (Sandbox Code Playgroud)

使用 spark 3.1 读取并再次保存为 parquet,我得到以下元数据,并且 parquet …

snappy apache-spark parquet apache-spark-sql

5
推荐指数
1
解决办法
75
查看次数