当前位置: 首页 > 知识库问答 >
问题:

火花中的 Zip 2 列 [重复]

谢承
2023-03-14

数据帧结构:

 |     main_id|                  id|           createdBy|
 +------------+--------------------+--------------------+
 |1           |          [10,20,30]|        [999,888,777|
 |2           |                [30]|               [666]|

预期的数据帧结构:

|     main_id|                  id|           createdBy|
+------------+--------------------+--------------------+
|1                           10                    999
|1                           20                    888
|1                           30                    777
|2           |               30|                   666

Code_1已尝试:

 df.select($"main_id",explode($"id"),$"createdBy").select($"main_id",$"id",explode($"createdBy"))

这也导致错误配对和重复。关于我应该调整什么以获得所需输出的任何建议。

我还尝试在第一条select语句中使用多次爆炸,这将引发错误。

Code_2尝试:

import org.apache.spark.sql.functions.{udf, explode}
val zip = udf((xs: Seq[String], ys: Seq[String]) => xs.zip(ys))

df.withColumn("vars", explode(zip($"id", $"createdBy"))).select(
$"main_id",
$"vars._1".alias("varA"), $"vars._2".alias("varB")).show(1)

警告和错误:

warning: there was one deprecation warning; re-run with -deprecation for details
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 
in stage 564.0 failed 4 times, most recent failure: Lost task 0.3 in 
stage 564.0 (TID 11570, ma4-csxp-ldn1015.corp.apple.com, executor 288)

是的,我问了同样的问题,这个问题被关闭为重复,指向另一个解决方案,这就是我在片段2中尝试的。它也不起作用。任何建议都会很有帮助。

共有1个答案

乌靖
2023-03-14

或许以下内容可以有所帮助:

val x = someDF.withColumn("createdByExploded", explode(someDF("createdBy"))).select("createdByExploded", "main_id")
val y = someDF.withColumn("idExploded", explode(someDF("id"))).select("idExploded", "main_id")

val xInd = x.withColumn("index", monotonically_increasing_id)
val yInd = y.withColumn("index", monotonically_increasing_id)

val joined = xInd.join(yInd, xInd("index") === yInd("index"), "outer").drop("index")

https://forums.databricks.com/questions/8180/how-to-merge-two-data-frames-column-wise-in-apache.html

 类似资料:
  • 有没有关于为什么整个对象B需要序列化的想法? 关于“对象不可序列化”的异常:

  • 我试图从获取列,并将其转换为。

  • 我有一个数据集,如下所示: 但不管用。

  • 我们正试图在spark中生成数据集的逐列统计数据。除了使用统计库中的summary函数之外。我们使用以下程序: > 我们确定具有字符串值的列 为整个数据集生成键值对,使用列号作为键,使用列的值作为值 生成新的格式映射 (K,V)- 然后我们使用reduceByKey来找到所有列中所有唯一值的总和。我们缓存这个输出以减少进一步的计算时间。 在下一步中,我们使用for循环遍历列,以查找所有列的统计信息

  • 我有麻烦重命名基于csv的数据帧的标头。 我得到了以下数据帧:df1: 现在我想根据csv文件更改列名(第一行),如下所示: 因此,我期望数据帧如下所示: 有什么想法吗?感谢您的帮助:)

  • IOException:找不到键类'com.test.serializetest.toto'的序列化程序。如果使用自定义序列化,请确保配置“io.serializations”配置正确。在org.apache.hadoop.io.sequenceFile$writer.init(sequenceFile.java:1179)在org.apache.hadoop.io.sequenceFile$wr