Skip to content

Instantly share code, notes, and snippets.

@maltzsama
Created May 22, 2023 17:53
Show Gist options
  • Save maltzsama/5feef3150f973e1dc0402feaac4c27a4 to your computer and use it in GitHub Desktop.
Save maltzsama/5feef3150f973e1dc0402feaac4c27a4 to your computer and use it in GitHub Desktop.
pickleerror.md

O erro "TypeError: cannot pickle 'SSLContext' object" ocorre quando você está tentando serializar um objeto SSLContext, que não é serializável por padrão no PySpark.

Para contornar esse erro, você pode definir uma função personalizada para converter cada linha em JSON usando a biblioteca json do Python. Aqui está um exemplo de como fazer isso:

from pyspark.sql import SparkSession
import json

# Função para converter uma linha em JSON
def row_to_json(row):
    return json.dumps(row.asDict())

# Configurar a sessão Spark
spark = SparkSession.builder.getOrCreate()

# Criar DataFrame com dados de exemplo
data = [("John", 25), ("Jane", 30), ("Alice", 35)]
df = spark.createDataFrame(data, ["name", "age"])

# Converter cada linha para JSON usando a função personalizada
json_df = df.rdd.map(row_to_json).toDF(["json"])

# Exibir o DataFrame com as linhas convertidas para JSON
json_df.show(truncate=False)

Neste exemplo, definimos a função row_to_json() que converte uma linha em um dicionário usando o método asDict() e, em seguida, usa a função json.dumps() para serializar o dicionário em uma string JSON.

Em seguida, usamos o RDD do DataFrame (df.rdd) para aplicar a função row_to_json() em cada linha e, em seguida, convertemos o RDD resultante de volta para um DataFrame usando toDF(). Especificamos o nome da coluna como "json" usando toDF(["json"]).

Por fim, exibimos o DataFrame resultante json_df, que contém uma coluna com os registros convertidos para JSON.

Essa abordagem personalizada permite converter as linhas em JSON sem depender da função toJSON() do PySpark, evitando assim o erro relacionado ao SSLContext.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment