将 lzo 文件作为数据集导入 java spark
Importing a lzo file into java spark as dataset
我有一些使用 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 文件作为参数传递,显示的结果是难以辨认的垃圾。
有没有办法让它工作?我将 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>
这将激活包含包 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>
就是这样! 运行 再次使用您的程序,它应该可以运行!
我有一些使用 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 文件作为参数传递,显示的结果是难以辨认的垃圾。
有没有办法让它工作?我将 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>
这将激活包含包 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>
就是这样! 运行 再次使用您的程序,它应该可以运行!