1

我有一些使用 lzo 压缩的 tsv 格式的数据。现在,我想在 java spark 程序中使用这些数据。

目前,我可以解压缩文件,然后使用 Java 将它们作为文本文件导入

    SparkSession spark = SparkSession.builder()
            .master("local[2]")
            .appName("MyName")
            .getOrCreate();

    Dataset<Row> input = spark.read()
            .option("sep", "\t")
            .csv(args[0]);

    input.show(5);   // visually check if data were imported correctly

我在第一个参数中传递了解压缩文件的路径。如果我将 lzo 文件作为参数传递,则 show 的结果是难以辨认的垃圾。

有没有办法让它工作?我使用 IntelliJ 作为 IDE,并且项目是在 Maven 中设置的。

4

1 回答 1

1

我找到了解决方案。它由两部分组成:安装hadoop-lzo包并配置它;执行此操作后,代码将与问题中的代码保持一致,前提是可以将 lzo 文件导入单个分区。

下面我将解释如何为在 IntelliJ 中设置的 maven 项目执行此操作。

  • 安装包 hadoop-lzo:您需要修改pom.xmlmaven 项目文件夹中的文件。它应包含以下摘录:

    <repositories>
        <repository>
            <id>twitter-twttr</id>
            <url>http://maven.twttr.com</url>
        </repository>
    </repositories>
    
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <dependencies>
    
        <dependency>
            <!-- Apache Spark main library -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>
    
        <dependency>
            <!-- Packages for datasets and dataframes -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.hadoop.gplcompression/hadoop-lzo -->
        <dependency>
            <groupId>com.hadoop.gplcompression</groupId>
            <artifactId>hadoop-lzo</artifactId>
            <version>0.4.20</version>
        </dependency>
    
    </dependencies>
    

这将激活包含包hadoop-lzo的 maven Twitter 存储库,并使 hadoop-lzo 可用于项目。

  • 第二步是创建一个core-site.xml文件告诉hadoop你已经安装了一个新的编解码器。它应该放在程序文件夹中的某个位置。我把它放在下面src/main/resources/core-site.xml并将文件夹标记为资源(右键单击 IntelliJ 项目面板中的文件夹 -> 将目录标记为 -> 资源根目录)。该core-site.xml文件应包含:

    <configuration>
        <property>
            <name>io.compression.codecs</name>
            <value>org.apache.hadoop.io.compress.DefaultCodec,
                com.hadoop.compression.lzo.LzoCodec,
                com.hadoop.compression.lzo.LzopCodec,
                org.apache.hadoop.io.compress.GzipCodec,
                org.apache.hadoop.io.compress.BZip2Codec</value>
        </property>
        <property>
            <name>io.compression.codec.lzo.class</name>
            <value>com.hadoop.compression.lzo.LzoCodec</value>
        </property>
    </configuration>
    

就是这样!再次运行你的程序,它应该可以工作了!

于 2017-08-01T12:42:01.090 回答