הגדרת קטלוג זמן הריצה של Lakehouse ל-Managed Service for Apache Spark באמצעות Apache Iceberg 1.9

קטלוג Apache Iceberg בהתאמה אישית ל-BigQuery מאפשר לחבר מנועי Apache Spark ו-Apache Flink באמצעות Apache Iceberg בגרסה 1.9 וגרסאות קודמות לקטלוג הייעודי לזמן ריצה של Lakehouse. ב-Lakehouse ללא גבולות, השילוב הזה מספק שכבת מטא-נתונים משותפת אחת לניהול פורמטים של טבלאות פתוחות באשכולות של Managed Service for Apache Spark ובManaged Service for Apache Spark ללא שרת (serverless).

לפני שמתחילים

  1. מפעילים את החיוב בפרויקט Google Cloud . כך בודקים אם החיוב מופעל בפרויקט
  2. מפעילים את BigQuery API ואת Dataproc API.

    הפעלת ממשקי ה-API

  3. איך פועל הקטלוג הייעודי לזמן ריצה של Lakehouse

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להגדרת הקטלוג הייעודי לזמן ריצה של Lakehouse, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:

  • יצירת אשכול של Managed Service for Apache Spark: Dataproc Worker (roles/dataproc.worker) בחשבון השירות שמוגדר כברירת מחדל של Compute Engine בפרויקט
  • יוצרים טבלאות בקטלוג הייעודי לזמן ריצה של Lakehouse:
    • ‫Dataproc Worker (roles/dataproc.worker) בחשבון השירות של Managed Service for Apache Spark VM בפרויקט
    • BigQuery Data Editor (roles/bigquery.dataEditor) בחשבון השירות של Managed Service for Apache Spark VM בפרויקט
    • Storage Object User (roles/storage.objectUser) בחשבון השירות של המכונה הווירטואלית של Managed Service for Apache Spark בפרויקט
  • שליחת שאילתות לטבלאות בקטלוג הייעודי לזמן ריצה של Lakehouse:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הגדרת הקטלוג הייעודי לזמן ריצה של Lakehouse עם אשכולות של Managed Service for Apache Spark

אתם יכולים להגדיר את הקטלוג הייעודי לזמן ריצה של Lakehouse עם אשכולות של Managed Service for Apache Spark באמצעות Apache Spark או Apache Flink:

Apache Spark

  1. מגדירים אשכול חדש. כדי ליצור אשכול חדש, מריצים את הפקודה gcloud dataproc clusters create הבאה, שמכילה את ההגדרות שנדרשות כדי להשתמש בקטלוג הייעודי לזמן ריצה של Lakehouse:

    gcloud dataproc clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --region=LOCATION \
        --single-node

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_NAME: שם לאשכול.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו יוצרים את האשכול.
    • ‫LOCATION: האזור ב-Compute Engine שבו יוצרים את האשכול.
  2. שולחים משימת Apache Spark באחת מהשיטות הבאות:

    Google Cloud CLI

    gcloud dataproc jobs submit spark-sql \
      --project=PROJECT_ID \
      --cluster=CLUSTER_NAME \
      --region=REGION \
      --jars=https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR \
      --properties=spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
      spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,\
      spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,\
      spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,\
      spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY \
      --execute="SPARK_SQL_COMMAND"

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמכיל את האשכול.
    • ‫CLUSTER_NAME: שם האשכול שבו משתמשים כדי להריץ את משימת Apache Spark SQL.
    • ‫REGION: האזור ב-Compute Engine שבו נמצא האשכול.
    • ‫BIGLAKE_ICEBERG_CATALOG_JAR: ה-URI של Cloud Storage של הפלאגין של הקטלוג בהתאמה אישית של Apache Iceberg שבו רוצים להשתמש. בהתאם למספר הגרסה של Apache Iceberg, בוחרים אחת מהאפשרויות הבאות:
      • ‫Apache Iceberg 1.9.1: ‏ gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • ‫Apache Iceberg 1.6.1: ‏gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    • ‫LOCATION: המיקום של המשאבים ב-BigQuery.
    • ‫CATALOG_NAME: השם של קטלוג Apache Spark שבו משתמשים במשימת ה-SQL.
    • ‫WAREHOUSE_DIRECTORY: התיקייה ב-Cloud Storage שמכילה את מחסן הנתונים. הערך הזה מתחיל ב-gs://.
    • ‫SPARK_SQL_COMMAND: שאילתת Apache Spark SQL שרוצים להריץ. השאילתה הזו כוללת את הפקודות ליצירת המשאבים. לדוגמה, כדי ליצור מרחב שמות וטבלה.

    spark-sql CLI

    1. נכנסים לדף VM instances במסוף Google Cloud .

      כניסה לדף VM Instances

    2. כדי להתחבר למכונה וירטואלית של אשכול, לוחצים על SSH בשורה שבה מופיע השם של המכונה הווירטואלית הראשית של האשכול, שהוא שם האשכול ואחריו הסיומת -m. הפלט אמור להיראות כך:

      Connected, host fingerprint: ssh-rsa ...
      Linux cluster-1-m 3.16.0-0.bpo.4-amd64 ...
      ...
      example-cluster@cluster-1-m:~$
      
    3. בטרמינל, מריצים את פקודת האתחול הבאה של הקטלוג הייעודי לזמן ריצה של Lakehouse:

      spark-sql \
        --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR \
        --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \
        --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \
        --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \
        --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \
        --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫BIGLAKE_ICEBERG_CATALOG_JAR: ה-URI של Cloud Storage של הפלאגין של הקטלוג בהתאמה אישית של Apache Iceberg שבו רוצים להשתמש. בהתאם למספר הגרסה של Apache Iceberg, בוחרים אחת מהאפשרויות הבאות:
      • ‫Apache Iceberg 1.9.1: ‏ gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar
      • ‫Apache Iceberg 1.6.1: ‏gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
    • ‫CATALOG_NAME: השם של קטלוג Apache Spark שבו אתם משתמשים עם משימת ה-SQL.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud של הקטלוג הייעודי לזמן ריצה של Lakehouse, שאליו מקושר הקטלוג של Apache Spark.
    • ‫LOCATION: המיקום של Google Cloud לקטלוג הייעודי לזמן ריצה של Lakehouse.
    • ‫WAREHOUSE_DIRECTORY: התיקייה ב-Cloud Storage שמכילה את מחסן הנתונים. הערך הזה מתחיל ב-gs://.

    אחרי שמתחברים לאשכול, במסוף של Apache Spark מופיע הפרומפט spark-sql, שבו אפשר להשתמש כדי לשלוח משימות של Apache Spark.

      spark-sql (default)>
    
  1. יוצרים אשכול Managed Service for Apache Spark עם רכיב Apache Flink אופציונלי מופעל, ומוודאים שמשתמשים בגרסת אימג' 2.2 ואילך.

  2. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  3. ברשימת המכונות הווירטואליות, לוחצים על SSH כדי להתחבר למכונה הווירטואלית הראשית של האשכול, שמופיעה בתור שם האשכול ואחריו הסיומת -m.

  4. מגדירים את הפלאגין של הקטלוג המותאם אישית של Apache Iceberg ל-BigQuery בשביל הקטלוג הייעודי לזמן ריצה של Lakehouse:

    FLINK_VERSION=1.19
    ICEBERG_VERSION=1.6.1
    
    cd /usr/lib/flink
    
    sudo wget -c https://repo.maven.apache.org/maven2/org/apache/iceberg/iceberg-flink-runtime-${FLINK_VERSION}/${ICEBERG_VERSION}/iceberg-flink-runtime-${FLINK_VERSION}-${ICEBERG_VERSION}.jar -P lib
    
    sudo gcloud storage cp gs://spark-lib/bigquery/iceberg-bigquery-catalog-${ICEBERG_VERSION}-1.0.2.jar lib/
  5. מפעילים את הסשן של Apache Flink ב-YARN:

    HADOOP_CLASSPATH=`hadoop classpath`
    
    sudo bin/yarn-session.sh -nm flink-dataproc -d
    
    sudo bin/sql-client.sh embedded \
    -s yarn-session
  6. יוצרים קטלוג ב-Apache Flink:

    CREATE CATALOG CATALOG_NAME WITH (
    'type'='iceberg',
    'warehouse'='WAREHOUSE_DIRECTORY',
    'catalog-impl'='org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog',
    'gcp_project'='PROJECT_ID',
    'gcp_location'='LOCATION'
    );

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CATALOG_NAME: מזהה הקטלוג של Apache Flink, שמקושר לקטלוג הייעודי לזמן ריצה של Lakehouse.
    • ‫WAREHOUSE_DIRECTORY: נתיב הבסיס של ספריית המחסן (התיקייה ב-Cloud Storage שבה Apache Flink יוצר קבצים). הערך הזה מתחיל ב-gs://.
    • ‫PROJECT_ID: מזהה הפרויקט של הקטלוג הייעודי לזמן ריצה של Lakehouse, שאליו מקושר הקטלוג של Apache Flink.
    • ‫LOCATION: המיקום של המשאבים ב-BigQuery.

הסשן של Apache Flink מחובר עכשיו לקטלוג הייעודי לזמן ריצה של Lakehouse, ואתם יכולים להריץ פקודות SQL של Apache Flink.

אחרי שהתחברתם לקטלוג הייעודי לזמן ריצה של Lakehouse, אתם יכולים ליצור משאבים ולצפות בהם על סמך המטא-נתונים שמאוחסנים בקטלוג הייעודי לזמן ריצה של Lakehouse.

לדוגמה, נסו להריץ את הפקודות הבאות בסשן האינטראקטיבי של Apache Flink SQL כדי ליצור מסד נתונים וטבלה של Apache Iceberg.

  1. שימוש בקטלוג Apache Iceberg בהתאמה אישית ל-BigQuery:

    USE CATALOG CATALOG_NAME;

    מחליפים את CATALOG_NAME במזהה הקטלוג של Apache Flink.

  2. יוצרים מסד נתונים, שיוצר מערך נתונים ב-BigQuery:

    CREATE DATABASE IF NOT EXISTS DATABASE_NAME;

    מחליפים את DATABASE_NAME בשם של מסד הנתונים החדש.

  3. משתמשים במסד הנתונים שיצרתם:

    USE DATABASE_NAME;
  4. יוצרים טבלת Apache Iceberg. הקוד הבא יוצר טבלת מכירות לדוגמה:

    CREATE TABLE IF NOT EXISTS ICEBERG_TABLE_NAME (
      order_number BIGINT,
      price        DECIMAL(32,2),
      buyer        ROW<first_name STRING, last_name STRING>,
      order_time   TIMESTAMP(3)
    );

    מחליפים את ICEBERG_TABLE_NAME בשם של הטבלה החדשה.

  5. הצגת המטא-נתונים של הטבלה:

    DESCRIBE EXTENDED ICEBERG_TABLE_NAME;
  6. מציגים את הטבלאות במסד הנתונים:

    SHOW TABLES;

הטמעת נתונים בטבלה

אחרי שיוצרים טבלת Apache Iceberg בקטע הקודם, אפשר להשתמש ב-Apache Flink DataGen כמקור נתונים כדי להטמיע נתונים בזמן אמת בטבלה. השלבים הבאים הם דוגמה לתהליך העבודה הזה:

  1. יוצרים טבלה זמנית באמצעות DataGen:

    CREATE TEMPORARY TABLE DATABASE_NAME.TEMP_TABLE_NAME
    WITH (
      'connector' = 'datagen',
      'rows-per-second' = '10',
      'fields.order_number.kind' = 'sequence',
      'fields.order_number.start' = '1',
      'fields.order_number.end' = '1000000',
      'fields.price.min' = '0',
      'fields.price.max' = '10000',
      'fields.buyer.first_name.length' = '10',
      'fields.buyer.last_name.length' = '10'
    )
    LIKE DATABASE_NAME.ICEBERG_TABLE_NAME (EXCLUDING ALL);

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫DATABASE_NAME: שם מסד הנתונים שבו תאוחסן הטבלה הזמנית.
    • ‫TEMP_TABLE_NAME: שם לטבלה הזמנית.
    • ‫ICEBERG_TABLE_NAME: השם של טבלת Apache Iceberg שיצרתם בקטע הקודם.
  2. מגדירים את המקביליות ל-1:

    SET 'parallelism.default' = '1';
  3. מגדירים את המרווח בין נקודות הבדיקה:

    SET 'execution.checkpointing.interval' = '10second';
  4. מגדירים את נקודת הציון:

    SET 'state.checkpoints.dir' = 'hdfs:///flink/checkpoints';
  5. מפעילים את משימת הסטרימינג בזמן אמת:

    INSERT INTO ICEBERG_TABLE_NAME SELECT * FROM TEMP_TABLE_NAME;

    הפלט אמור להיראות כך:

    [INFO] Submitting SQL update statement to the cluster...
    [INFO] SQL update statement has been successfully submitted to the cluster:
    Job ID: 0de23327237ad8a811d37748acd9c10b
    
  6. כדי לבדוק את הסטטוס של משימת הסטרימינג:

    1. נכנסים לדף Clusters במסוף Google Cloud .

      כניסה לדף Clusters

    2. בוחרים את האשכול.

    3. לוחצים על הכרטיסייה ממשקי אינטרנט.

    4. לוחצים על הקישור YARN ResourceManager.

    5. בממשק YARN ResourceManager, מאתרים את הסשן של Apache Flink ולוחצים על הקישור ApplicationMaster בקטע Tracking UI.

    6. בעמודה Status, מוודאים שסטטוס המשימה הוא Running.

  7. מריצים שאילתה על נתוני הסטרימינג בלקוח Apache Flink SQL:

    SELECT * FROM ICEBERG_TABLE_NAME
    /*+ OPTIONS('streaming'='true', 'monitor-interval'='3s')*/
    ORDER BY order_time desc
    LIMIT 20;
  8. הרצת שאילתות על נתונים בסטרימינג ב-BigQuery:

    SELECT * FROM `DATABASE_NAME.ICEBERG_TABLE_NAME`
    ORDER BY order_time desc
    LIMIT 20;
  9. מסיימים את משימת הסטרימינג בלקוח Apache Flink SQL:

    STOP JOB 'JOB_ID';

    מחליפים את JOB_ID במזהה המשימה שהוצג בפלט כשיצרתם את משימת הסטרימינג.

הגדרת הקטלוג הייעודי לזמן ריצה של Lakehouse באמצעות Managed Service for Apache Spark ללא שרת (serverless)

אתם יכולים להגדיר את הקטלוג הייעודי לזמן ריצה של Lakehouse באמצעות Managed Service for Apache Spark ללא שרת (serverless), באמצעות Apache Spark SQL או PySpark.

Apache Spark SQL

  1. יוצרים קובץ SQL עם פקודות Apache Spark SQL שרוצים להריץ בקטלוג הייעודי לזמן ריצה של Lakehouse. לדוגמה, הפקודה הבאה יוצרת מרחב שמות וטבלה:

    CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME;
    CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CATALOG_NAME: שם הקטלוג שמפנה לטבלת Apache Spark.
    • ‫NAMESPACE_NAME: השם של מרחב השמות שמפנה לטבלת Apache Spark.
    • ‫TABLE_NAME: שם הטבלה ב-Apache Spark.
    • ‫WAREHOUSE_DIRECTORY: ה-URI של התיקייה ב-Cloud Storage שבה מאוחסן מחסן הנתונים.
  2. מריצים את הפקודה הבאה של gcloud dataproc batches submit spark-sql כדי לשלוח משימת אצווה של Apache Spark SQL:

    gcloud dataproc batches submit spark-sql SQL_SCRIPT_PATH \
        --project=PROJECT_ID \
        --region=REGION \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --deps-bucket=BUCKET_PATH \
        --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog, \
        spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog, \
        spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID, \
        spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION, \
        spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY"

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SQL_SCRIPT_PATH: הנתיב לקובץ ה-SQL שבו משתמשת המשימה באצווה.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו רוצים להריץ את המשימה באצווה.
    • ‫REGION: האזור שבו פועל עומס העבודה.
    • ‫SUBNET_NAME (אופציונלי): השם של רשת משנה של VPC ב-REGION שעומדת בדרישות של רשת המשנה של הסשן.
    • ‫BUCKET_PATH: המיקום של הקטגוריה ב-Cloud Storage להעלאת יחסי התלות של עומס העבודה. ה-WAREHOUSE_DIRECTORY נמצא בקטגוריה הזו. לא צריך את הקידומת gs:// של ה-URI של הקטגוריה. אפשר לציין את הנתיב או השם של הקטגוריה, לדוגמה mybucketname1.
    • ‫LOCATION: המיקום שבו תתבצע המשימה באצווה.

    מידע נוסף על שליחת משימות באצווה של Apache Spark זמין במאמר הרצת עומס עבודה באצווה של Apache Spark.

PySpark

  1. יוצרים קובץ Python עם פקודות PySpark שרוצים להריץ בקטלוג הייעודי לזמן ריצה של Lakehouse.

    לדוגמה, הפקודה הבאה מגדירה סביבת Apache Spark לאינטראקציה עם טבלאות Apache Iceberg שמאוחסנות בקטלוג הייעודי לזמן ריצה של Lakehouse. לאחר מכן, הפקודה יוצרת מרחב שמות חדש וטבלת Apache Iceberg בתוך מרחב השמות הזה.

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder \
    .appName("Lakehouse runtime catalog Iceberg") \
    .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \
    .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \
    .getOrCreate()
    
    spark.sql("USE `CATALOG_NAME`;")
    spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")
    spark.sql("USE NAMESPACE_NAME;")
    spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';")

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו רוצים להריץ את המשימה באצווה.
    • ‫LOCATION: המיקום שבו נמצאים המשאבים של BigQuery.
    • ‫CATALOG_NAME: שם הקטלוג שמפנה לטבלת Apache Spark.
    • ‫TABLE_NAME: שם הטבלה ב-Apache Spark.
    • ‫WAREHOUSE_DIRECTORY: ה-URI של התיקייה ב-Cloud Storage שבה מאוחסן מחסן הנתונים.
    • ‫NAMESPACE_NAME: השם של מרחב השמות שמפנה לטבלת Apache Spark.
  2. שולחים את משימת האצווה באמצעות הפקודה gcloud dataproc batches submit pyspark:

    gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \
        --version=2.2 \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_PATH \
        --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_DIRECTORY"

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PYTHON_SCRIPT_PATH: הנתיב לסקריפט Python שמשמש את המשימה באצווה.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו רוצים להריץ את המשימה באצווה.
    • ‫REGION: האזור שבו פועל עומס העבודה.
    • ‫BUCKET_PATH: המיקום של הקטגוריה ב-Cloud Storage להעלאת יחסי התלות של עומס העבודה. לא צריך להוסיף את הקידומת gs:// ל-URI של הקטגוריה. אפשר לציין את הנתיב או את השם של הקטגוריה, לדוגמה, mybucketname1.

    למידע נוסף על שליחת משימות אצווה של PySpark, קראו את ההפניה ל-gcloud של PySpark.

המאמרים הבאים