将lzo文件作为数据集导入java spark

将lzo文件作为数据集导入java spark,java,maven,apache-spark,intellij-idea,lzo,Java,Maven,Apache Spark,Intellij Idea,Lzo,我用lzo压缩了一些tsv格式的数据。现在,我想在java spark程序中使用这些数据 目前,我能够解压缩这些文件,然后使用 SparkSession spark = SparkSession.builder() .master("local[2]") .appName("MyName") .getOrCreate(); Dataset<Row> input = spark.read()

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

目前,我能够解压缩这些文件,然后使用

    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
SparkSession spark=SparkSession.builder()
.master(“本地[2]”)
.appName(“我的名字”)
.getOrCreate();
数据集输入=spark.read()
.选项(“sep”和“\t”)
.csv(args[0]);
输入。显示(5);//目视检查数据是否正确导入
在这里,我在第一个参数中传递了解压缩文件的路径。如果我将lzo文件作为参数传递,show的结果就是难以辨认的垃圾


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

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

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

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

    <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>
    

就这样!再次运行你的程序,它应该会工作

我尝试了上述方法,但得到了
java.lang.RuntimeException:本机lzo库不可用
java.lang.UnsatifiedLinkError:java.library.path中没有gplcompression
<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>