JavaアプリケーションでApache Sparkを使用しています。 私は2つのDataFrame
を持っています:df1
とdf2
です。 df1
は、email
,firstName
およびlastName
を有するを含む。 df2
はを含み、email
を含む。Apache Sparkで異なる構造を持つ2つのデータフレームに対してNOT INを実装する方法
df1
のすべての行を含むDataFrame
:df3
を作成します。このメールはdf2
には存在しません。
Apache Sparkでこれを行う方法はありますか?私はそれらtoJavaRDD()
をキャストし、すべての電子メールを含むにし、その使用subtract
後df1
をフィルタリングすることによりdf1
とdf2
からJavaRDD<String>
を作成しようとしましたが、私はds1
に新しいJavaRDD
をマッピングする方法を知っているとDataFrame
を得ることはありません。
基本的にはdf1
のメールがdf2
にないすべての行が必要です。
DataFrame customers = sqlContext.cassandraSql("SELECT email, first_name, last_name FROM customer ");
DataFrame customersWhoOrderedTheProduct = sqlContext.cassandraSql("SELECT email FROM customer_bought_product " +
"WHERE product_id = '" + productId + "'");
JavaRDD<String> customersBoughtEmail = customersWhoOrderedTheProduct.toJavaRDD().map(row -> row.getString(0));
List<String> notBoughtEmails = customers.javaRDD()
.map(row -> row.getString(0))
.subtract(customersBoughtEmail).collect();
ありがとうございます。最初の例は私のために働いた。これは、Javaのバージョン 'DataFrame customersWhoHaventOrderedTheProduct = customers .join(customersWhoOrderedTheProduct.col(" email "))、customers.col(" email ")。equalTo(customersWhoOrderedTheProduct.col(" email ")) 私はSQLと同等の機能を試しましたが、この問題が発生しました。「scala.MatchError:UUIDType」というエラーメッセージが表示されました。 (クラスorg.apache.spark.sql.cassandra.types.UUIDType $) ' –
私は助けることができてうれしいです。 – zero323
私は 'Cassandra'を使用しています。私は主キーとして' UUID'を持っています。多分、Scalaはその型にマッチすることができません。 –