将 zip 文件读入 Apache Spark 数据帧

问题描述 投票:0回答:2

使用

Apache Spark
(或
pyspark
)我可以将文本文件读取/加载到
spark dataframe
中,并将该数据帧加载到sql数据库中,如下所示:

df = spark.read.csv("MyFilePath/MyDataFile.txt", sep="|", header="true", inferSchema="true")
df.show()
.............
#load df into an SQL table
df.write(.....)

问题:如果数据文件位于 zip 文件内,我们如何实现相同的效果?该 zip 文件只有一个大小为

6GB

的文本文件
python python-3.x apache-spark pyspark apache-spark-sql
2个回答
1
投票

我创建了一个示例数据集employee.txt,位于.zip 文件夹中。我已经使用 pandas Lib 来读取压缩的压缩 txt 文件。可能会有多种方法,但这是最好的方法。

记录:employee.txt

Name;dept;age
Ravi kumar;Data Science;29
Amitesh Kumar;QA;29
Rohit Kumar;Sales;29
Ahimanyu;java;29
# import required modules
import zipfile
import pandas as pd

# read the dataset using the compression zip
pdf = pd.read_csv(r'C:\Users\ravi\Documents\pyspark test\dataset\employee.zip',compression='zip', sep=';')

# creating spark session and coverting pandas dataframe to spark datafram
from pyspark.sql import SparkSession
spark=SparkSession.builder.appName("zip reader").getOrCreate()
sparkDF=spark.createDataFrame(pdf)
print(sparkDF.show())

#mysql connection details

driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/test"
user = "root"
pwd = "India@123"

#writing final output to RDMS 
sparkDF.write.format("jdbc").option("driver", driver)\
    .option("url", url)\
    .option("dbtable", "employee")\
    .option("user", user)\
    .option("password", pwd)\
    .save()


最终输出:

+-------------+------------+---+
|         Name|        dept|age|
+-------------+------------+---+
|   Ravi kumar|Data Science| 29|
|Amitesh Kumar|          QA| 29|
|  Rohit Kumar|       Sales| 29|
|     Ahimanyu|        java| 29|
+-------------+------------+---+

0
投票

Spark 支持以下压缩格式:

  • bzip2
  • 放气
  • 活泼
  • lz4
  • gzip

应该自动检测压缩格式,但是您可以在读取文件时指定它,例如

.option("compression", "snappy")

因此,不支持

zip
格式:您需要使用受支持的压缩格式之一。 7zip 等工具可以压缩为
bzip2
gzip
格式。您甚至可以使用 Java 压缩为
gzip
,例如GZIP 压缩为字节数组

© www.soinside.com 2019 - 2024. All rights reserved.