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

如何更新一个DataFrame给另一个DataFrame与更新的值?

谭飞掣
2023-03-14

我正在使用齐柏林飞艇0.6.2和火花2.0。

我尝试在循环中执行查询,但效果不是很好。

我需要循环一个数据帧的每一行,大约5000行,并执行一个查询,这将在另一个数据帧中增加一个值。

以下是我的尝试:

val t2 = time
t2.registerTempTable("t2")
u.collect().foreach{ r => 
println(r(0))
val c=r(1)
val start="\""+r(2)+"\""
val end="\""+r(3)+"\""
sql("INSERT INTO TABLE t2 SELECT time, recordings + "+c+" AS recordings FROM time WHERE time >= " + start + " AND time < " + end)
}

我试着从两个数据帧中提取一小部分,但仍然很慢。我觉得我做得不对。

知道如何快速更新数据帧吗?

共有1个答案

杨轶
2023-03-14

我需要循环一个数据帧的每一行,大约5000行,并执行一个查询,这将在另一个数据帧中增加一个值。

我可以识别出u时间t2表格t2用于别名time,以便以后在INSERT查询中使用它。正当

PROTIP:我很高兴有他们的模式。

假设您有一个5000行的数据帧,名为df5k

// it's a fake 5k = a mere 5 rows for the sake of simplicity
// I think `u` is your 5k table (that you unnecessarily `collect` to `foreach`)
val u = Seq(
  (0, 0, 0, 3),
  (1, 3, 4, 5),
  (2, 6, 6, 8),
  (3, 9, 9, 17)).toDF("id", "c", "start", "end")

// I think `t2` is an alias for `time` and you want to update `t2`
val time = Seq(
  (1, 10),
  (4, 40),
  (9, 90)).toDF("time", "recordings")

// this is the calculation of the new records
val new_t2 = u.join(time)
  .where('time >= 'start)
  .where('time < 'end)
  .withColumn("recordings + c", 'recordings + 'c)
  .select('time, $"recordings + c" as 'recordings)

// the following is an equivalent of INSERT INTO using Dataset API
val solution = time.union(new_t2)

注意:不是更新DataFrame,而是使用新值创建新的DataFrame。

 类似资料:
  • 问题内容: 我有3个级别的MultiIndex的熊猫数据框。我试图根据与两个级别相对应的值列表来提取此数据框的行。 我有这样的事情: 现在,我要获取索引级别为“ b”和“ c”的所有行: 即值的具有或在水平和分别为:。 所以我想在第一级上学习一个,并在第二级和第三级上提取特定的元组。 最初,我认为将多索引对象传递给.loc会拉出我想要的值/级别,但这是行不通的。做这样的事情的最好方法是什么? 问题

  • 问题内容: 在Pandas DataFrame中,我可以使用函数将列值与另一列进行匹配。 例如:假设我们有一个DataFrame: 和另一个DataFrame: 我可以使用的功能相匹配的列值对的列值 例如: 产量: PySpark DataFrame中的等效操作是什么? 上面的代码给我一条错误消息: 问题答案: 这种操作在spark中称为“左半联接”:

  • 我必须在我的android活动中实现2个回收器视图,其中第一个回收器视图显示类别,第二个将显示来自所选类别的项目。我已经实现了第一个回收器视图。 现在,在RecycerView中单击一个项目时,我需要突出显示该视图,还需要显示该类别下的项目。当我单击另一个视图时,第一个视图高亮应该更改为单击并显示该类别中的项目的新视图。另外,当我谈到这个活动时,第一个项目应该在第一个回收器视图中默认突出显示,相应

  • 问题内容: 我是java的新手,我被困在这里…我要做的是将一个java文件中arraylist的更改更新为另一个文件中的JPanel。我正在对arraylist进行排序,因此无法手动完成。有什么办法可以让我“告诉” JPanel痛楚吗? 我有进行排序(工作)的BubbleSort.java,有包含JPanel和JFrame类(用于显示未排序的直方图的工作)的Animation.java。 这是家庭

  • 问题内容: 我有两个桌子,看起来都像 我需要根据每个表中的检查名称复制from 到的值。 此声明有任何提示吗? 问题答案: 除了此答案外,如果您需要根据tableA.value动态更改tableB.value,则可以执行以下操作:

  • 我有一个dataframe,我在我的第一列groupByKey上有一个字符串数组,我想在我的dataframe的新列中实例一个新对象。 我将实例的对象具有以下结构: