Невозможно построить Pandas кадр данных в блокноте Jupyter - PullRequest
1 голос
/ 20 апреля 2020

Я пишу код в блокноте Jupyter, который я открыл через кластер GCP. Я читаю данные из BigQuery с помощью коннектора Spark-BigQuery. Я пытаюсь взять подмножество этих данных и построить их, но всякий раз, когда я пытаюсь выполнить команду, ядро ​​отключается / повторно подключается. Это уже случалось в тех местах, где я делал что-то не так и не заметил (поэтому я знаю, что это не просто случайное отключение). Но в этом случае я действительно понятия не имею, что я делаю не так. То, что я делаю, очень похоже на следующее руководство на GitHub. Я прочитал данные в Spark Dataframe. Затем я преобразовываю фрейм данных в Pandas фрейм данных и пытаюсь построить его. Это где ошибка происходит. Я экспериментировал с подмножествами разных размеров, поэтому я знаю, что этого не происходит, потому что мой набор данных слишком большой. Я также попытался создать «тестовый» фрейм данных со случайными числами и построить его - он работает отлично. Так что это должно быть проблемой с моим набором данных ... Я просто не уверен, что. Код ниже:

Чтение данных в:

import pandas as pd
import numpy as np
from pyspark.sql import SparkSession

spark = SparkSession.builder \
  .appName('Jupyter BigQuery Storage')\
  .config('spark.jars', 'gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar') \
  .getOrCreate()

table = "bigquery-public-data.ncaa_basketball.mbb_pbp_sr"
df = spark.read \
  .format("bigquery") \
  .option("table", table) \
  .load()
df.printSchema()

df.createOrReplaceTempView('df')

query_string = """
    SELECT event_type,
    season,
    type,
    team_alias,
    team_market,
    team_name,
    team_basket,
    event_id,
    event_coord_x,
    event_coord_y,
    three_point_shot,
    shot_made
    FROM df
    WHERE type = "fieldgoal"
        AND event_coord_x IS NOT NULL
        AND event_coord_y IS NOT NULL
    ORDER BY season
"""

df_shots = spark.sql(query_string)
df_shots.orderBy("season", "event_id").toPandas().head(5)

import matplotlib.pyplot as plt
%matplotlib inline

df_test = df_shots.toPandas()

test_new.plot(x='event_coord_x',y='event_coord_y',kind='line',figsize=(12,6))

Вывод для последней части просто:

<matplotlib.axes._subplots.AxesSubplot at 0x7f355a732950>

И затем ядро ​​отключается / переподключается. Для справки, и event_coord_x, и event_coord_y имеют тип float64. Я не понимаю, почему это может вызвать какие-либо проблемы, но я даже пытался преобразовать их в целые числа и составлять графики, и проблема все еще возникает.

У меня такое ощущение, что это может быть что-то действительно тривиальным, но сейчас я Я в тупике. Извините, у меня нет ничего указанного c, например, сообщения об ошибке (потому что его нет). Любые предложения будут очень полезны.

1 Ответ

1 голос
/ 20 апреля 2020

При использовании Cloud Dataproc 1.5 версии изображения ядро ​​отображается в d ie и перезапускается при построении рисунка. Это можно увидеть в журналах от Jupyter. Проблема связана с Apache Knox , который используется кластером Cloud Datapro c.

Knox ограничивает размер сообщения websocket размером буфера, и этого недостаточно для некоторых взаимодействий Jupyter. Это должно быть исправлено в следующем выпуске изображения.

В настоящее время обходной путь должен использовать Cloud Dataproc 1.4 версию изображения или изменить параметр figsize на меньшие значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...