ניהול סשנים של BigQuery DataFrames וקלט/פלט

במאמר הזה מוסבר איך לנהל סשנים ולבצע פעולות קלט ופלט (I/O) כשמשתמשים ב-BigQuery DataFrames. תלמדו איך ליצור סשנים ולהשתמש בהם, לעבוד עם נתונים בזיכרון ולקרוא מקבצים ומטבלאות BigQuery ולכתוב בהם.

סשנים ב-BigQuery

הספרייה BigQuery DataFrames משתמשת באופן פנימי באובייקט של סשן מקומי כדי לנהל מטא-נתונים. כל אובייקט DataFrame ו-Series מתחבר לסשן, כל סשן מתחבר למיקום, וכל שאילתה בסשן מופעלת במיקום שבו יצרתם את הסשן. אפשר להשתמש בדוגמת הקוד הבאה כדי ליצור סשן באופן ידני ולהשתמש בו לטעינת נתונים:

import bigframes
import bigframes.pandas as bpd

# Create session object
context = bigframes.BigQueryOptions(
    project=YOUR_PROJECT_ID,
    location=YOUR_LOCATION,
)
session = bigframes.Session(context)

# Load a BigQuery table into a dataframe
df1 = session.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Create a dataframe with local data:
df2 = bpd.DataFrame({"my_col": [1, 2, 3]}, session=session)

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

import bigframes
import bigframes.pandas as bpd

context = bigframes.BigQueryOptions(location=YOUR_LOCATION, project=YOUR_PROJECT_ID)

session1 = bigframes.Session(context)
session2 = bigframes.Session(context)

series1 = bpd.Series([1, 2, 3, 4, 5], session=session1)
series2 = bpd.Series([1, 2, 3, 4, 5], session=session2)

try:
    series1 + series2
except ValueError as e:
    print(e)  # Error message: Cannot use combine sources from multiple sessions

סשן גלובלי

‫BigQuery DataFrames מספק סשן גלובלי שמוגדר כברירת מחדל, שאפשר לגשת אליו באמצעות השיטה bigframes.pandas.get_global_session(). ב-Colab, צריך לספק מזהה פרויקט למאפיין bigframes.pandas.options.bigquery.project לפני שמשתמשים בו. אפשר גם להגדיר מיקום באמצעות המאפיין bigframes.pandas.options.bigquery.location, שברירת המחדל שלו היא US (מספר אזורים).

בדוגמת הקוד הבאה אפשר לראות איך מגדירים אפשרויות עבור הסשן הגלובלי:

import bigframes.pandas as bpd

# Set project ID for the global session
bpd.options.bigquery.project = YOUR_PROJECT_ID
# Update the global default session location
bpd.options.bigquery.location = YOUR_LOCATION

כדי לאפס את המיקום או הפרויקט של הסשן הגלובלי, צריך לסגור את הסשן הנוכחי באמצעות הפעלת השיטה bigframes.pandas.close_session().

הרבה פונקציות מובנות של BigQuery DataFrames משתמשות בסשן הגלובלי כברירת מחדל. בדוגמת הקוד הבאה אפשר לראות איך פונקציות מובנות משתמשות בסשן הגלובלי:

# The following two statements are essentially the same
df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")
df = bpd.get_global_session().read_gbq("bigquery-public-data.ml_datasets.penguins")

נתונים בזיכרון

אפשר ליצור אובייקטים של DataFrames ו-Series באמצעות מבני נתונים מובנים של Python או NumPy, בדומה לאופן שבו יוצרים אובייקטים באמצעות pandas. כדי ליצור אובייקט, משתמשים בקוד לדוגמה הבא:

import numpy as np

import bigframes.pandas as bpd

s = bpd.Series([1, 2, 3])

# Create a dataframe with Python dict
df = bpd.DataFrame(
    {
        "col_1": [1, 2, 3],
        "col_2": [4, 5, 6],
    }
)

# Create a series with Numpy
s = bpd.Series(np.arange(10))

כדי להמיר אובייקטים מסוג pandas לאובייקטים מסוג DataFrames באמצעות השיטה או הקונסטרוקטורים read_pandas(), משתמשים בדוגמת הקוד הבאה:

import numpy as np
import pandas as pd

import bigframes.pandas as bpd

pd_df = pd.DataFrame(np.random.randn(4, 2))

# Convert Pandas dataframe to BigQuery DataFrame with read_pandas()
df_1 = bpd.read_pandas(pd_df)
# Convert Pandas dataframe to BigQuery DataFrame with the dataframe constructor
df_2 = bpd.DataFrame(pd_df)

כדי להשתמש בשיטה to_pandas() לטעינת נתונים של BigQuery DataFrames לזיכרון, אפשר להשתמש בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

bf_df = bpd.DataFrame({"my_col": [1, 2, 3]})
# Returns a Pandas Dataframe
bf_df.to_pandas()

bf_s = bpd.Series([1, 2, 3])
# Returns a Pandas Series
bf_s.to_pandas()

אומדן עלויות עם הפרמטר dry_run

טעינה של כמות גדולה של נתונים יכולה לקחת הרבה זמן ומשאבים. כדי לראות כמה נתונים מעובדים, משתמשים בפרמטר dry_run=True בקריאה to_pandas(). כדי לבצע הרצה יבשה, משתמשים בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Returns a Pandas series with dry run stats
df.to_pandas(dry_run=True)

קריאה וכתיבה של קבצים

אפשר לקרוא נתונים מקבצים תואמים לתוך BigQuery DataFrames. הקבצים האלה יכולים להיות במחשב המקומי או ב-Cloud Storage. אפשר להשתמש בדוגמת הקוד הבאה כדי לקרוא נתונים מקובץ CSV:

import bigframes.pandas as bpd

# Read a CSV file from GCS
df = bpd.read_csv("gs://cloud-samples-data/bigquery/us-states/us-states.csv")

כדי לשמור את ה-BigQuery DataFrames בקבצים מקומיים או בקבצים ב-Cloud Storage באמצעות השיטה to_csv, משתמשים בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

df = bpd.DataFrame({"my_col": [1, 2, 3]})
# Write a dataframe to a CSV file in GCS
df.to_csv(f"gs://{YOUR_BUCKET}/myfile*.csv")

קריאה וכתיבה של טבלאות BigQuery

כדי ליצור BigQuery DataFrames באמצעות הפניות לטבלאות ב-BigQuery והפונקציה bigframes.pandas.read_gbq, משתמשים בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

כדי להשתמש במחרוזת SQL עם הפונקציה read_gbq() כדי לקרוא נתונים ל-BigQuery DataFrames, משתמשים בדוגמת הקוד הבאה:

import bigframes.pandas as bpd

sql = """
SELECT species, island, body_mass_g
FROM bigquery-public-data.ml_datasets.penguins
WHERE sex = 'MALE'
"""

df = bpd.read_gbq(sql)

כדי לשמור את אובייקט DataFrame בטבלה ב-BigQuery, משתמשים בשיטה to_gbq() של אובייקט DataFrame. בדוגמת הקוד הבאה אפשר לראות איך עושים את זה:

import bigframes.pandas as bpd

df = bpd.DataFrame({"my_col": [1, 2, 3]})

df.to_gbq(f"{YOUR_PROJECT_ID}.{YOUR_DATASET_ID}.{YOUR_TABLE_NAME}")

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