【问题标题】:How to join two dataframes?如何连接两个数据框?
【发布时间】:2016-05-05 07:30:02
【问题描述】:

我无法让 Sparks DataFrame join 工作(没有产生结果)。这是我的代码:

val e = Seq((1, 2), (1, 3), (2, 4))
var edges = e.map(p => Edge(p._1, p._2)).toDF()
var filtered = edges.filter("start = 1").distinct()
println("filtered")
filtered.show()
filtered.printSchema()
println("edges")
edges.show()
edges.printSchema()
var joined = filtered.join(edges, filtered("end") === edges("start"))//.select(filtered("start"), edges("end"))
println("joined")
joined.show()

它需要在顶层定义case class Edge(start: Int, end: Int)。这是它产生的输出:

filtered
+-----+---+
|start|end|
+-----+---+
|    1|  2|
|    1|  3|
+-----+---+

root
 |-- start: integer (nullable = false)
 |-- end: integer (nullable = false)

edges
+-----+---+
|start|end|
+-----+---+
|    1|  2|
|    1|  3|
|    2|  4|
+-----+---+

root
 |-- start: integer (nullable = false)
 |-- end: integer (nullable = false)

joined
+-----+---+-----+---+
|start|end|start|end|
+-----+---+-----+---+
+-----+---+-----+---+

我不明白为什么输出是空的。为什么filtered 的第一行没有与edges 的最后一行合并?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:
    val f2 = filtered.withColumnRenamed("start", "fStart").withColumnRenamed("end", "fEnd")
    f2.join(edges, f2("fEnd") === edges("start")).show
    

    我相信这是因为filtered("start").equals(edges("start")),即filtered 是边缘的过滤视图,它们共享列定义。这些列是相同的,因此 Spark 无法识别您引用的是哪一个。

    因此,您可以执行以下操作

    edges.select(filtered("start")).show
    

    【讨论】:

    • 我在哪里可以读到这个?我还有另一个问题,当我在循环中通过重命名进行这样的连接时,我会在 14 次迭代后从 spark 中得到一个 ERROR Utils: Uncaught exception in thread driver-heartbeater java.io.IOException: java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.HashMap$SerializationProxy to field org.apache.spark.executor.TaskMetrics._accumulatorUpdates of type scala.collection.immutable.Map in instance of org.apache.spark.executor.TaskMetrics 异常?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多