Java+;Spark简单联接

Java+;Spark简单联接,java,apache-spark,tuples,Java,Apache Spark,Tuples,我是Spark的新手,我必须在我的大学里这样做 这里有两个带数据库的文本文件 用户信息:(id、电子邮件、语言、位置) 交易信息:(交易id、产品id、用户id、采购金额、项目描述) 我的任务是提供如下查询: 用户id、计数(产品id)、位置 非常感谢您的帮助 下面是一个简单的示例,您可以开始了。但是请阅读spark文档 输出: +-------+-----+--------+ |user-id|count|location| +-------+-----+--------+ | 1|

我是Spark的新手,我必须在我的大学里这样做

这里有两个带数据库的文本文件

用户信息:(id、电子邮件、语言、位置)

交易信息:(交易id、产品id、用户id、采购金额、项目描述)

我的任务是提供如下查询:

用户id、计数(产品id)、位置


非常感谢您的帮助

下面是一个简单的示例,您可以开始了。但是请阅读spark文档

输出:

+-------+-----+--------+
|user-id|count|location|
+-------+-----+--------+
|      1|    1|      US|
|      3|    2|      FR|
|      2|    2|      GB|
+-------+-----+--------+

这就是我在我的课程(简单连接)JoinJob=新JoinJob(sc);javapairdd results=job.joinData(“./src/main/resources/transactions.txt”,“/src/main/resources/users.txt”);System.out.println(results.collect().get(0)。\u 1);System.out.println(results.collect().get(0)。\u 2);System.out.println(results.collect().get(1)。\u 1);System.out.println(results.collect().get(1)。\u 2);印刷:1美国2 FR1请参考官方文件,阅读并尝试一些真正的东西!除了收集,你分享的东西甚至没有一个火花功能。这不是一个家庭作业写作平台。@MichałBednarz如果你能写SQL,下次就用它吧。非常感谢你!嘿,我投票了!我只是没有足够的声望点让它可见:)谢谢@MichałBednarz
1   1   1   300 prod1
2   1   2   300 prod1
3   1   2   300 prod2
4   2   3   100 prod2
5   1   3   300 prod3
val spark =
    SparkSession.builder().master("local").appName("test").getOrCreate()
    import spark.implicits._
    val df1 = spark.sparkContext.parallelize(Seq(
          (1, "user1@test.com", "EN", "US"),
          (2, "user2@test2.com", "EN", "GB"),
          (3, "user3@test3.com", "FR", "FR")
        ))
      .toDF("id", "email", "language", "location")

    val df2 = spark.sparkContext.parallelize(Seq(
          (1, 1, 1, 300, "prod1"),
          (2, 1, 2, 300, "prod1"),
          (3, 1, 2, 300, "prod2"),
          (4, 2, 3, 100, "prod2"),
          (5, 1, 3, 300, "prod3")
        )
      ).toDF("transaction-id", "product-id","user-id", "purchase-amount", "itemdescription")


    val df2Count = df2.groupBy("user-id").count().alias("count_product_id")

    val result = df2Count.join(df1, df2Count("user-id") === df1("id"))

    result.select("user-id", "count", "location").show
+-------+-----+--------+
|user-id|count|location|
+-------+-----+--------+
|      1|    1|      US|
|      3|    2|      FR|
|      2|    2|      GB|
+-------+-----+--------+