es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

pyspark devolviendo todas las filas con nombres de columna al usar jdbc.

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código ni la salida en markdown.

Soy nuevo en spark, y actualmente estoy trabajando con la base de datos hive conectando desde un servidor remoto. He seguido muchos ejemplos sobre cómo conectar spark a un jdbc de hive y no muchos funcionan. Uno que funcionó es con la configuración a continuación, sin embargo, al recuperar una tabla en un marco de datos de chispa, los valores de fila son los nombres de columna. ¿Hay algo mal con mi consulta o configuración de chispa?
“`
from pyspark import SparkContext, SparkConf
from pyspark.sql import HiveContext, SparkSession
spark = SparkSession \
.builder \
.master('yarn') \
.appName('Connect-to-Hive') \
.config('spark.dynamicAllocation.enabled', 'false') \
.config('parquet.compression', 'SNAPPY') \
.enableHiveSupport() \
.getOrCreate()

sqlsUrl = 'jdbc:hive2://{username}@{}:10000/{database}'

qryStr = """(SELECT * FROM table_name) as t"""

df_channel = spark.read.format('jdbc')\
.option('url',sqlsUrl)\
.option('dbtable', qryStr )\
.option("user", "{username}") \
.option("password", "{passw}") \
.option('UseNativeQuery', 1)\
.load()
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar relacionado con la consulta SQL en la variable qryStr. Específicamente, parece que la consulta SQL está seleccionando todas las columnas de la tabla, pero también asignando un alias al resultado como “t”. Este alias puede estar provocando que los nombres de las columnas anulen los valores de las filas.

    Para resolver este problema, intente quitar el alias de la consulta y seleccionar solamente las columnas requeridas, por ejemplo:

    qryStr = """SELECT col1, col2, col3 FROM table_name"""

    Esto debería asegurarse de que los nombres de las columnas y los valores se mapeen correctamente en el resultado del DataFrame de Spark.

    Alternativamente, si se requiere que la consulta tenga un alias u otro formato, puede valer la pena experimentar con el parámetro option('customSchema', ...) para especificar el esquema del DataFrame de forma explícita.

    En general, es siempre bueno comprobar los tipos de datos de la tabla fuente y asegurarse de que sean compatibles con los tipos de datos de Spark, ya que esto también puede provocar problemas inesperados al transferir datos entre ambos sistemas.

Comments are closed.