簡體   English   中英

使用 pyspark 讀取和處理存儲在 GCP 中的鑲木地板文件的最佳方法

[英]Best way to read and process parquet files stored in GCP using pyspark

我剛開始使用 GCS。 我用它來存儲一些鑲木地板數據文件。 在 GCS 之前,我將所有 parquet 文件本地存儲在我的機器上,以測試一些代碼以使用 Spark 將所有 parquet 文件讀取到數據幀中。

這是我在 python 中設置為在本地工作的示例:

source_path = '/mylocal/directory/files'


appName = "PySpark Parquet Example"
master = "local"
# Create Spark session
spark = SparkSession.builder \
    .appName(appName) \
    .master(master) \
    .getOrCreate()

# Read parquet files
df = spark.read.parquet(
    source_path)

既然我已經開始將所有源數據存儲到 GCS 中的一個存儲桶中,我有點不知從哪里開始使用等效方法來訪問現在存儲在我的 GCS 存儲桶中的一個文件夾中的文件。 我已經研究了 gsutil 和其他庫,但我願意接受任何關於 go 的最簡單方法的建議。 有什么建議么?

據我了解,您正在嘗試從本地 spark 訪問存儲在 gcs 存儲桶中的鑲木地板文件。 如果是這種情況,請按照以下步驟順序操作

  1. 下載 gcs-hadoop-connector.jar 並將其放在本地 spark 的 jars 文件夾中。 注意:請從以下鏈接( https://mvnrepository.com/artifact/com.google.cloud.bigdataoss/gcs-connector )下載正確匹配的版本。
  2. 創建並下載具有存儲訪問權限的服務帳戶 json 文件,以將數據讀/寫到 gcs 存儲桶中。
  3. 在 spark 代碼中更新您的 hadoop 配置,如下所示
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[1]") \
                   .appName('readParquetData') \
                   .getOrCreate()
conf =spark.sparkContext._jsc.hadoopConfiguration()
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
conf.set("fs.AbstractFileSystem.gs.impl","com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
conf.set("fs.gs.project.id", projectId)
conf.set("fs.gs.auth.service.account.enable", "true")
conf.set("fs.gs.auth.service.account.json.keyfile", secretLocation)
conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")

  1. 現在您可以使用以下代碼使用 spark 讀取 gcs 中的數據
df=spark.read.option("header",True).parquet(location)

完整代碼:

import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[1]") \
                    .appName('readParquetData') \
                    .getOrCreate()
conf =spark.sparkContext._jsc.hadoopConfiguration()
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
conf.set("fs.AbstractFileSystem.gs.impl","com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
conf.set("fs.gs.project.id", projectId)
conf.set("fs.gs.auth.service.account.enable", "true")
conf.set("fs.gs.auth.service.account.json.keyfile", secretLocation)
conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")

df=spark.read.option("header",True).parquet("gs://bucketName/folderName")
df.show()

如果它有助於解決您的問題,請批准答案。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM