PySpark: как сопоставить 2 столбца? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть два DataFrames с одним столбцом каждый (300 строк каждый):

df_realite.take(1)
[Row(realite=1.0)]
df_proba_classe_1.take(1)
[Row(probabilite=0.6196931600570679)]

Я хотел бы сделать один DataFrame с двумя столбцами. Я попробовал:

    _ = spark.createDataFrame([df_realite.rdd, df_proba_classe_1.rdd]       , 
                               schema=StructType([ StructField('realite'     , FloatType() ) , 
                                                   StructField('probabilite' , FloatType() ) ]))

Но

 _.take(10)

дает мне пустые значения:

[Row(realite=None, probabilite=None), Row(realite=None, probabilite=None)]

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

я думаю, что это то, что вы ищете, и я бы порекомендовал этот метод, только если ваши данные очень малы, как в вашем случае (300 строк), потому что collect () не является хорошей практикой для тонны данных, иначесоединяйте маршрут с фиктивными столбцами и выполняйте широковещательное соединение, чтобы не происходило перемешивания

from pyspark.sql.functions import *
from pyspark.sql.types import *

df1 = spark.range(10).select(col("id").cast("float"))
df2 = spark.range(10).select(col("id").cast("float"))

l1 = df1.rdd.flatMap(lambda x: x).collect()
l2 = df2.rdd.flatMap(lambda x: x).collect()
list_df = zip(l1, l2)

schema=StructType([ StructField('realite', FloatType() ) , 
                    StructField('probabilite' , FloatType() ) ])

df = spark.createDataFrame(list_df, schema=schema)
df.show()

+-------+-----------+
|realite|probabilite|
+-------+-----------+
|    0.0|        0.0|
|    1.0|        1.0|
|    2.0|        2.0|
|    3.0|        3.0|
|    4.0|        4.0|
|    5.0|        5.0|
|    6.0|        6.0|
|    7.0|        7.0|
|    8.0|        8.0|
|    9.0|        9.0|
+-------+-----------+
0 голосов
/ 19 апреля 2019

Может быть более краткий способ (или способ без объединения), но вы всегда можете просто дать им оба идентификатора и присоединиться к ним, например:

from pyspark.sql import functions

df1 = df_realite.withColumn('id', functions.monotonically_increasing_id())
df2 = df_proba_classe_1.withColumn('id', functions.monotonically_increasing_id())

df1.join(df2, on='id').select('realite', 'probabilite'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...