spark计算两个DataFrame的差集、交集、合集

spark计算两个DataFrame的差集、交集、合集

闲话不说,直接上代码和结果

import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{SQLContext, SparkSession}

/**
 * @class DataFrameFun
 * @author yyz
 * @date 2021/01/24 20:59
 *       spark计算两个DataFrame的差集、交集、合集
 *       spark 计算两个dataframe 的差集、交集、合集,只选择某一列来对比比较好。新建两个 dataframe :
 *       https://www.cnblogs.com/TTyb/p/7991952.html
 * */
object DataFrameFun {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.OFF)


    //创建SparkSession 环境方法一
//    val conf = new SparkConf().setAppName("TTyb").setMaster("local")
//    val sc = new SparkContext(conf)
//    val spark = new SQLContext(sc)

    //创建SparkSession 环境方法二 ,和方法一等价
    val spark = SparkSession.builder().master("local").appName("AppName").getOrCreate()

    val sentenceDataFrame1 = spark.createDataFrame(Seq(
      (1, "asf"),
      (2, "2143"),
      (4, "f8934y")
    )).toDF("label", "sentence")
    sentenceDataFrame1.show()

    val sentenceDataFrame = spark.createDataFrame(Seq(
      (1, "asf"),
      (2, "2143"),
      (3, "rfds")
    )).toDF("label", "sentence")
    sentenceDataFrame.show()



    println("1、差集 except")
    val newDF1 = sentenceDataFrame1.select("sentence").except(sentenceDataFrame.select("sentence"))
    newDF1.show()

    println("2、交集 intersect")
    val newDF2 = sentenceDataFrame1.select("sentence").intersect(sentenceDataFrame.select("sentence"))
    newDF2.show()

    println("3、合集 union")
    val newDF3 = sentenceDataFrame1.select("sentence").union(sentenceDataFrame.select("sentence"))
    newDF3.show()

    println("4、合集最好去一下重 distinct :")
    val newDF4 = sentenceDataFrame1.select("sentence").union(sentenceDataFrame.select("sentence")).distinct()
    newDF4.show()
  }

}
/***
 +-----+--------+
|label|sentence|
+-----+--------+
|    1|     asf|
|    2|    2143|
|    4|  f8934y|
+-----+--------+

+-----+--------+
|label|sentence|
+-----+--------+
|    1|     asf|
|    2|    2143|
|    3|    rfds|
+-----+--------+

1、差集 except
+--------+
|sentence|
+--------+
|  f8934y|
+--------+

2、交集 intersect
+--------+
|sentence|
+--------+
|     asf|
|    2143|
+--------+

3、合集 union
+--------+
|sentence|
+--------+
|     asf|
|    2143|
|  f8934y|
|     asf|
|    2143|
|    rfds|
+--------+

4、合集最好去一下重 distinct :
+--------+
|sentence|
+--------+
|    rfds|
|     asf|
|    2143|
|  f8934y|
+--------+
 * */

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要求两个DataFrame差集,可以使用Pandas的merge()函数。首先,使用merge()函数将两个DataFrame按照指定的列进行合并,然后使用drop_duplicates()函数去除重复的行,最后使用isin()函数找到不在另一个DataFrame中的行。具体代码如下: ```python diff_df = pd.merge(df1, df2, how='outer', indicator=True).query('_merge == "left_only"').drop_duplicates() ``` 这段代码将df1和df2按照默认的列进行合并,并添加了一个名为"_merge"的列,表示每行的合并情况。然后使用query()函数找到"_merge"列中值为"left_only"的行,即df1中不在df2中的行。最后使用drop_duplicates()函数去除重复的行,得到两个DataFrame差集。 #### 引用[.reference_title] - *1* *3* [【Python】DataFrame差集/交集/并集求解](https://blog.csdn.net/fengdu78/article/details/125827394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Pandas求两个dataframe差集 详解](https://blog.csdn.net/guoyc439/article/details/124165334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值