如何使用Scala的DataFrame比较表中的每一列而不关心列是啥? [重复]

Posted

技术标签:

【中文标题】如何使用Scala的DataFrame比较表中的每一列而不关心列是啥? [重复]【英文标题】:How do I compare each column in a table using DataFrame by Scala without caring what the column is? [duplicate]如何使用Scala的DataFrame比较表中的每一列而不关心列是什么? [重复] 【发布时间】:2017-06-20 12:55:36 【问题描述】:

我之前问的问题如下。 Last question

表1——ID对表

表2——属性表

表 3

例如id1和id2有不同的颜色和大小,所以id1和id2行(表3中的第2行)有“id1 id2 0 0”;

id1和id3颜色相同,大小不同,所以id1和id3行(表3第3行)有“id1 id3 1 0”;

相同的属性---1 不同的属性---0

但是,如果我不知道 Table2 中有多少个属性列怎么办;我怎样才能做到?比如我不知道列名颜色或大小。也许还有另一列叫做品牌。那怎么才能拿到Table3呢?

【问题讨论】:

那么您想要包含哪些列 - 除了 id 列之外的所有“table2”列? 你不应该编辑你原来的问题吗:***.com/questions/44582222/… Tom Lous,谢谢你提醒我。下次我会注意的。 【参考方案1】:

以下解决方案应该适用于Table2 中任何未知数量的属性。我已经编辑了您Last Question的答案

val t1 = List(
  ("id1","id2"),
  ("id1","id3"),
  ("id2","id3")
).toDF("id_x", "id_y")

val t2 = List(
  ("id1","blue","m","brand1"),
  ("id2","red","s","brand1"),
  ("id3","blue","s","brand2")
).toDF("id", "color", "size", "brand")

val outSchema = t2.columns.tail

var t3 = t1
  .join(t2.as("x"), $"id_x" === $"x.id", "inner")
  .join(t2.as("y"), $"id_y" === $"y.id", "inner")

  for(columnName <- outSchema)
    t3 = t3.withColumn(columnName+"s", when(col(s"x.$columnName") === col(s"y.$columnName"),1).otherwise(0))
      .drop(columnName)
      .drop("id")
      .withColumnRenamed(columnName+"s", columnName)

  
t3.show(false)

最终的输出是

+----+----+-----+----+-----+
|id_x|id_y|color|size|brand|
+----+----+-----+----+-----+
|id1 |id2 |0    |0   |1    |
|id1 |id3 |1    |0   |0    |
|id2 |id3 |0    |1   |0    |
+----+----+-----+----+-----+

该解决方案应该适用于任何未知数量的属性。

【讨论】:

太棒了!新手总是被一个简单的问题卡住很长时间。非常感谢! 新手经验不足,但很快他们就会:)。我以前也和你一样。感谢您的接受和点赞。 :) 嗨,拉梅什。你最初是如何学习 scala 和 spark 的?除了官网还有什么好材料推荐给我的吗? 我还没学。这就是我的感觉。您可以加入 coursera 免费课程,在 scala 中进行函数式编程。这很有帮助。 :) 是的,绝对是 :) Programming in Scala 和 gumroad.com/l/AtomicScala

以上是关于如何使用Scala的DataFrame比较表中的每一列而不关心列是啥? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

scala如何取出rdd中的每一个元素

将列表与 DataFrame 中的每条记录进行比较

将一个 pandas DataFrame 的副本合并到另一个 DataFrame 的每一行中?

如何在 Databricks 的 PySpark 中使用在 Scala 中创建的 DataFrame

如何从 Scala 中的 DataFrame 在 Spark 中创建分布式稀疏矩阵

如何在 Scala/Spark 中为数据框中的每一行编写一个 Json 文件并重命名文件