Tôi đang sử dụng Apache Spark trong ứng dụng Java của mình. Tôi có hai số DataFrame
s: df1
và df2
. df1
chứa s với email
, firstName
và lastName
. df2
chứa s với email
.Cách triển khai NOT IN cho hai DataFrames với cấu trúc khác nhau trong Apache Spark
Tôi muốn tạo một DataFrame
: df3
có chứa tất cả các hàng trong df1
, email nào không có trong df2
.
Có cách nào để thực hiện việc này với Apache Spark không? Tôi cố gắng để tạo ra JavaRDD<String>
từ df1
và df2
bởi đúc chúng toJavaRDD()
và lọc df1
để chứa tất cả các email và sau đó sử dụng subtract
, nhưng tôi không biết làm thế nào để lập bản đồ mới JavaRDD
để ds1
và có được một DataFrame
.
Về cơ bản tôi cần tất cả các hàng nằm trong số df1
có email không nằm trong số 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();
Cảm ơn bạn. Ví dụ đầu tiên làm việc cho tôi. Đây là phiên bản Java 'DataFrame customersWhoHaventOrderedTheProduct = customers .join (customersWhoOrderedTheProduct.select (customersWhoOrderedTheProduct.col (" email ")), customers.col (" email ") .đối với (customersWhoOrderedTheProduct.col (" email "))," leftouter ") . where (customersWhoOrderedTheProduct.col (" email "). isNull()). thả (customersWhoOrderedTheProduct.col (" email "));' Tôi đã thử tương đương SQL nhưng điều này xảy ra 'scala.MatchError: UUIDType (của lớp org.apache.spark.sql.cassandra.types.UUIDType $) ' –
Tôi vui vì tôi có thể giúp đỡ. – zero323
Tôi đang sử dụng 'Cassandra' và tôi có một' UUID' làm khóa chính. Có lẽ Scala không thể phù hợp với loại. –