ホーム>source

2つのデータフレームがあります。

  • 最初のデータフレーム DFNum 48列と58500行があります。
  • 2番目のデータフレーム DFString 7列と58500行があります。

両方のデータフレームの列はすべて互いに異なります。 私の目標は、2つのデータフレームを55列(48 + 7)で常に58500行の1つに結合して、結合前の順序を維持することです。

私はいくつかの試みを行い、他の質問も読みましたが、成功しませんでした。特に私は試しました:

ウィズウィズそしてこれは私に次のエラーを与えます: ウィズウィズ 。

明らかに、クロス結合を使用すると、必要以上に多くの行が得られます:58500 * 58500行。

次に、等しい列 val df = DFNum.join(DFString) を追加してdfを編集してみました結合する両方のデータフレームに: ウィズウィズウィズウィズ

そして使用:

ウィズウィズそしてこれは私に次のエラーを与えます: ウィズウィズ 。

私はいくつかの種類の結合も試しました(すべて Detected implicit cartesian product for INNER join between logical plans. Join condition is missing or trivial. Join condition is missing or trivial. Either: use the CROSS JOIN syntax to allow cartesian products between these relations, or: enable implicit cartesian products by setting the configuration variable spark.sql.crossJoin.enabled=true; でそして id そして val tmpNum = DFNum.withColumn("id", monotonically_increasing_id()) そして val tmpString = DFString.withColumn("id", monotonically_increasing_id()) ) お気に入り: ウィズウィズウィズウィズ等 しかし、私はいつも同じエラー val df = tmpNum.join(tmpString) を受け取ります 。

(明らかに USING column `id` cannot be resolved on the left side of the join. The left-side columns:[...] そして tmpNum 新しいデータフレームの列の合計はもう1つです。後で tmpString をドロップしますカラム)。

誰かが何かアイデアや提案があれば、私はそれをいただければ幸いです。

DFNum
あなたの答え
  • 解決した方法 # 1

    2つのデータフレームを結合するキー列がない場合は、 monotonically_increasing_id を使用することができます

    <前>ウィズウィズ

    次に、両方のデータフレームに新しい列を追加します。データフレームが適切にソートされていることを確認してください。そうしないと、結合後にデータフレームデータが混乱します。

    <前>ウィズウィズ

    次に、 val a = Seq(("First",1), ("Secound",2), ("Third",3), ("Fourth",4)).toDF("col1", "col2") val b = Seq(("india",980), ("japan",990), ("korea",1000), ("chaina",900)).toDF("col3", "col4") a.show +-------+----+ | col1|col2| +-------+----+ | First| 1| |Secound| 2| | Third| 3| | Fourth| 4| +-------+----+ b.show +------+----+ | col3|col4| +------+----+ | india| 980| | japan| 990| | korea|1000| |chaina| 900| +------+----+ を使用して両方のデータフレームを結合します  列、中間の val a1 = a.withColumn("id", monotonically_increasing_id) val b1 = b.withColumn("id", monotonically_increasing_id) をドロップ  カラム

    <前>ウィズウィズ

  • 解決した方法 # 2

    2つのデータセットは、デカルトを使用する場合を除いて、一致するデータがないと結合できません。列名は同じである必要はありませんが、列の値は同じである必要があります。必要に応じて、すべての列を使用して2つのデータフレームを結合できます。

    <前>ウィズウィズ

  • 解決した方法 # 3

    私は最近これを試みましたが、まったく成功しませんでした。 2つのオブジェクトをpandasデータフレームに変換してから、マージを試すことができます。

    ステップ1:

    <前>ウィズウィズ

    ステップ2:

    <前>ウィズウィズ

    幸運を!!

  • 解決した方法 # 4

    宿題は一人ですることになっています。 StackOverflowユーザーの邪魔をしないでください。

    id

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ export to csv - C#を使用してsav(spss)ファイルをcsvファイルに変換する