Pyspark Dataframe Appliquer la fonction à deux colonnes

Dire que j'ai deux PySpark DataFrames df1 et df2.

df1=   'a' 
        1    
        2    
        5    

df2=   'b'
        3
        6

Et je veux trouver le plus proche df2['b'] valeur pour chaque df1['a'], et ajouter le plus proche des valeurs dans une nouvelle colonne dans df1.

En d'autres termes, pour chaque valeur x dans df1['a'], je veux trouver un y qui réalise min(abx(x-y)) pour tous y in df2['b'](note: peut supposer qu'il existe une seule y que peut atteindre le minimum de la distance), et le résultat serait

'a'    'b'
 1      3
 2      3
 5      6

J'ai essayé le code suivant pour créer une matrice de distance en premier (avant de trouver les valeurs de la réalisation de la distance minimale):

from pyspark.sql.types import IntegerType
from pyspark.sql.functions import udf

def dict(x,y):
    return abs(x-y)
udf_dict = udf(dict, IntegerType())

sql_sc = SQLContext(sc)
udf_dict(df1.a, df2.b)

qui donne

Column<PythonUDF#dist(a,b)>

Ensuite, j'ai essayé

sql_sc.CreateDataFrame(udf_dict(df1.a, df2.b))

qui fonctionne toujours sans donner d'erreur/de sortie.

Mes questions sont:

  1. Comme je suis nouveau à l'Étincelle, c'est ma façon de construire la sortie DataFrame efficace? (Ma solution serait la création d'une matrice de distance pour tous les a et b valeurs d'abord, et ensuite trouver la min un)
  2. Quel est le problème avec la dernière ligne de mon code et comment le résoudre?

OriginalL'auteur Chianti5 | 2016-11-02