使用
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
的文本文件
我创建了一个示例数据集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|
+-------------+------------+---+
Spark 支持以下压缩格式:
应该自动检测压缩格式,但是您可以在读取文件时指定它,例如
.option("compression", "snappy")
。
因此,不支持
zip
格式:您需要使用受支持的压缩格式之一。 7zip 等工具可以压缩为 bzip2
和 gzip
格式。您甚至可以使用 Java 压缩为 gzip
,例如GZIP 压缩为字节数组