Почему моя операция соединения с PySpark dataframe записывает пустой результат? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть два фрейма данных PySpark, которые я пытаюсь объединить в новый фрейм данных.Кажется, что операция соединения показывает нулевой фрейм данных.

Я использую записные книжки Jupyter для оценки кода в ядре PySpark, в кластере с одним мастером, 4 рабочих, YARN для выделения ресурсов.

from pyspark.sql.functions import monotonically_increasing_id,udf
from pyspark.sql.types import FloatType
from pyspark.mllib.linalg import DenseVector
firstelement=udf(lambda v:float(v[1]),FloatType())

a = [{'c_id': 'a', 'cv_id': 'b', 'id': 1}, {'c_id': 'c', 'cv_id': 'd', 'id': 2}]
ip = spark.createDataFrame(a)
b = [{'probability': DenseVector([0.99,0.01]), 'id': 1}, {'probability': DenseVector([0.6,0.4]), 'id': 2}]
op = spark.createDataFrame(b)

op.show() #shows the df
#probability, id
#[0.99, 0.01], 1
##probability is a dense vector, id is bigint

ip.show() #shows the df
#c_id, cv_id, id
#a,b,1
##c_id and cv_id are strings, id is bigint

op_final = op.join(ip, ip.id == op.id).select('c_id','cv_id',firstelement('probability')).withColumnRenamed('<lambda>(probability)','probability')

op_final.show() #gives a null df

#but the below seems to work, however, quite slow
ip.collect() 
op.collect()
op_final.collect()
op_final.show() #shows the joined df

Возможно, это мой недостаток опыта в Spark, но кто-нибудь может объяснить, почему я могу видеть первые два кадра данных, но не объединенный, если я не использую collect ()?

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