Quiero preguntar si usted tiene alguna idea acerca de cómo puedo especificar mucho de las condiciones en
pyspark cuando uso .join()

Ejemplo :
con la colmena :

query= "select a.NUMCNT,b.NUMCNT as RNUMCNT ,a.POLE,b.POLE as RPOLE,a.ACTIVITE,b.ACTIVITE as RACTIVITE FROM rapexp201412 b \
    join rapexp201412 a where (a.NUMCNT=b.NUMCNT and a.ACTIVITE = b.ACTIVITE and a.POLE =b.POLE  )\

Pero en pyspark no sé cómo hacerlo porque el siguiente:

df_rapexp201412.join(df_aeveh,df_rapexp2014.ACTIVITE==df_rapexp2014.ACTIVITE and df_rapexp2014.POLE==df_aeveh.POLE,'inner')

no funciona!!

  • podría plz pegar el mensaje de error para DataFrame.unirse? o pruebe a utilizar el keyBy/join en RDD, es apoyar el equi-join de condición muy bien.
  • El uso de & entre y asegúrese de poner cada condición en ()
  • Posibles duplicados de Cómo inscribirse en varias columnas en Pyspark?
InformationsquelleAutor malouke | 2015-12-02

2 Comentarios

  1. 15

    Citando chispa docs:

    (https://spark.apache.org/docs/1.5.2/api/python/pyspark.sql.html?highlight=dataframe%20join#pyspark.sql.DataFrame.join)

    join(otros, en=Ninguno, cómo=None) se Une con otro DataFrame, el uso de la
    dada la expresión de combinación.

    La siguiente realiza una combinación externa completa entre df1 y df2.

    Parámetros: otro – lado Derecho de la combinación en una cadena para unirse a
    nombre de la columna, una lista de los nombres de las columnas , una expresión de combinación (Columna) o un
    lista de Columnas. Si es una cadena o una lista de cadena que indica el
    nombre de la columna de combinación(s) columna(s) debe existir en ambos lados,
    y este realiza un interior equi-join. cómo – str, default ‘interior’. Uno
    de interior, exterior, left_outer, right_outer, semijoin.

    >>> df.join(df2, df.name == df2.name, 'outer').select(df.name, df2.height).collect()
     [Row(name=None, height=80), Row(name=u'Alice', height=None), Row(name=u'Bob', height=85)]
    
    
    >>> cond = [df.name == df3.name, df.age == df3.age]
    >>> df.join(df3, cond, 'outer').select(df.name, df3.age).collect()
    [Row(name=u'Bob', age=5), Row(name=u'Alice', age=2)]

    Por lo que necesita utilizar la «condición como una lista de» opción como en el último ejemplo.

  2. 2
    >>> cond = [df.name == df3.name, df.age == df3.age]
    >>> df.join(df3, cond, 'outer').select(df.name, df3.age).collect()
    [Row(name=u'Bob', age=5), Row(name=u'Alice', age=2)]

    Este trabajo no lo hizo con pyspark 1.3.1. Yo estaba «AssertionError: joinExprs debe ser la Columna»

    Lugar, he utilizado raw sql para unirse a los marcos de datos como se muestra a continuación

    df.registerTempTable("df")
    df3.registerTempTable("df3")
    
    sqlContext.sql("Select df.name,df3.age from df outer join df3 on df.name = df3.name and df.age =df3.age").collect()

Dejar respuesta

Please enter your comment!
Please enter your name here