Pysparkデータフレームは、2つの列に関数を適用します

Chianti5

私は2つのPySparkのデータフレームを持っていると言うdf1df2

df1=   'a' 
        1    
        2    
        5    

df2=   'b'
        3
        6

そしてdf2['b']、それぞれdf1['a']最も近いを見つけて、の新しい列として最も近い値を追加したいと思いますdf1

言い換えれば、各値のためxdf1['a']私が見つけたい、yその達成せmin(abx(x-y))、すべてのためのy in df2['b'](1つだけが存在することを想定することができるノートがy最小距離を達成することができます)、その結果は次のようになり

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

次のコードを試して、最初に距離行列を作成しました(最小距離を達成する値を見つける前に)。

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)

これは

Column<PythonUDF#dist(a,b)>

そして、私が試しました

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

エラー/出力を与えることなく永久に実行されます。

私の質問は以下のとおりです。

  1. 私はSparkを初めて使用するので、出力DataFrameを効率的に構築する方法はありますか?(私の方法は、最初にすべてのab値の距離行列を作成してからmin1つを見つけることです
  2. コードの最後の行の何が問題になっていて、それを修正する方法は?
マリウス

あなたの2番目の質問で開始 - あなただけの既存のデータフレームにUDFを適用することができ、私はあなたがこのような何かを考えていたと思います:

>>> df1.join(df2).withColumn('distance', udf_dict(df1.a, df2.b)).show()
+---+---+--------+
|  a|  b|distance|
+---+---+--------+
|  1|  3|       2|
|  1|  6|       5|
|  2|  3|       1|
|  2|  6|       4|
|  5|  3|       2|
|  5|  6|       1|
+---+---+--------+

しかし、内部使用することにより、この距離を適用するためのより効率的な方法がありますabs

>>> from pyspark.sql.functions import abs
>>> df1.join(df2).withColumn('distance', abs(df1.a -df2.b))

次に、以下を計算して一致する番号を見つけることができます。

>>> distances = df1.join(df2).withColumn('distance', abs(df1.a -df2.b))
>>> min_distances = distances.groupBy('a').agg(min('distance').alias('distance'))
>>> distances.join(min_distances, ['a', 'distance']).select('a', 'b').show()
+---+---+                                                                       
|  a|  b|
+---+---+
|  5|  6|
|  1|  3|
|  2|  3|
+---+---+

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rは2つの変数のデータフレームを集約し、関数を適用します

分類Dev

pandasデータフレームの各列に関数を適用します

分類Dev

リスト内のデータフレームの列にいくつかの関数を適用します

分類Dev

4つのデータフレーム列に2つの異なる数式を適用します

分類Dev

パンダは複数の列のデータフレームに関数を適用します

分類Dev

データフレームの列に関数を適用します(列はリストです)

分類Dev

データフレームの列に関数を適用します(列はリストです)

分類Dev

データフレーム行に2つのベクトルを取る関数を適用します

分類Dev

Rのデータフレームのすべての行の2つの列にカスタム関数を適用します

分類Dev

他の列を固定したまま、データフレームの1つの列に関数を「適用」する方法はありますか?

分類Dev

pandasデータフレームgroupbyの2番目の列に関数を適用します

分類Dev

関数データフレーム列を適用します

分類Dev

Pyspark-datetime.time関数をデータフレームのすべての行に適用します

分類Dev

列ごとに2つのデータフレームに複数の関数を適用する

分類Dev

パンダのデータフレームは列全体に関数を適用します

分類Dev

rの入力として2つのデータフレームを持つ関数を適用します

分類Dev

列の数に関係なく、データフレームに行ごとに関数を適用します

分類Dev

2つの引数を取るパンダデータフレームの列に関数を適用します

分類Dev

pandasデータフレームの各行に関数を適用して、2つの新しい列を作成します

分類Dev

pandasデータフレームの各行に関数を適用して、2つの新しい列を作成します

分類Dev

PySparkデータフレームのいくつかの列にStringIndexerを適用します

分類Dev

データフレーム列に関数を適用しますか?

分類Dev

3つの入力を持つ独自の関数をデータフレームに適用します

分類Dev

Rで列方向に2つのデータフレーム間に関数(ks.test)を適用する

分類Dev

Pythonデータフレームは、列ごとにグループごとに関数を適用します

分類Dev

2つのデータフレームで一致する列を取得し、列をループする関数を適用します

分類Dev

データフレームのリストの列に関数を適用し、結果を追加します

分類Dev

パンダのデータフレームのすべての列に関数を適用します

分類Dev

Pythonの適用関数を使用して列をデータフレームに追加しますか?

Related 関連記事

  1. 1

    Rは2つの変数のデータフレームを集約し、関数を適用します

  2. 2

    pandasデータフレームの各列に関数を適用します

  3. 3

    リスト内のデータフレームの列にいくつかの関数を適用します

  4. 4

    4つのデータフレーム列に2つの異なる数式を適用します

  5. 5

    パンダは複数の列のデータフレームに関数を適用します

  6. 6

    データフレームの列に関数を適用します(列はリストです)

  7. 7

    データフレームの列に関数を適用します(列はリストです)

  8. 8

    データフレーム行に2つのベクトルを取る関数を適用します

  9. 9

    Rのデータフレームのすべての行の2つの列にカスタム関数を適用します

  10. 10

    他の列を固定したまま、データフレームの1つの列に関数を「適用」する方法はありますか?

  11. 11

    pandasデータフレームgroupbyの2番目の列に関数を適用します

  12. 12

    関数データフレーム列を適用します

  13. 13

    Pyspark-datetime.time関数をデータフレームのすべての行に適用します

  14. 14

    列ごとに2つのデータフレームに複数の関数を適用する

  15. 15

    パンダのデータフレームは列全体に関数を適用します

  16. 16

    rの入力として2つのデータフレームを持つ関数を適用します

  17. 17

    列の数に関係なく、データフレームに行ごとに関数を適用します

  18. 18

    2つの引数を取るパンダデータフレームの列に関数を適用します

  19. 19

    pandasデータフレームの各行に関数を適用して、2つの新しい列を作成します

  20. 20

    pandasデータフレームの各行に関数を適用して、2つの新しい列を作成します

  21. 21

    PySparkデータフレームのいくつかの列にStringIndexerを適用します

  22. 22

    データフレーム列に関数を適用しますか?

  23. 23

    3つの入力を持つ独自の関数をデータフレームに適用します

  24. 24

    Rで列方向に2つのデータフレーム間に関数(ks.test)を適用する

  25. 25

    Pythonデータフレームは、列ごとにグループごとに関数を適用します

  26. 26

    2つのデータフレームで一致する列を取得し、列をループする関数を適用します

  27. 27

    データフレームのリストの列に関数を適用し、結果を追加します

  28. 28

    パンダのデータフレームのすべての列に関数を適用します

  29. 29

    Pythonの適用関数を使用して列をデータフレームに追加しますか?

ホットタグ

アーカイブ