Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark-如果主键匹配,是否更新目标数据?_Scala_Apache Spark_Pyspark - Fatal编程技术网

Scala Spark-如果主键匹配,是否更新目标数据?

Scala Spark-如果主键匹配,是否更新目标数据?,scala,apache-spark,pyspark,Scala,Apache Spark,Pyspark,如果使用spark满足特定条件,而不将目标读取到数据帧中,是否可以覆盖目标中的记录?例如,我知道如果两组数据都加载到数据帧中,我们可以这样做,但我想知道是否有一种方法可以执行此操作而不将目标加载到数据帧中。基本上,这是一种指定覆盖/更新条件的方法 我猜不会,但我想在我开始这个项目之前我会问一下。我知道我们有附加和覆盖的写入选项。我真正想要的是,如果数据目标中已经存在一些特定列,那么覆盖它并用新数据填充其他列。例如: 文件1: id,name,date,score 1,John,"1-10-17"

如果使用spark满足特定条件,而不将目标读取到数据帧中,是否可以覆盖目标中的记录?例如,我知道如果两组数据都加载到数据帧中,我们可以这样做,但我想知道是否有一种方法可以执行此操作而不将目标加载到数据帧中。基本上,这是一种指定覆盖/更新条件的方法

我猜不会,但我想在我开始这个项目之前我会问一下。我知道我们有附加和覆盖的写入选项。我真正想要的是,如果数据目标中已经存在一些特定列,那么覆盖它并用新数据填充其他列。例如:

文件1:

id,name,date,score
1,John,"1-10-17",35
2,James,"1-11-17",43
文件2:

id,name,date,score
3,Michael,"1-10-17",23
4,James,"1-11-17",56
5,James,"1-12-17",58
我希望结果如下所示:

id,name,date,score
1,John,"1-10-17",35
3,Michael,"1-10-17",23
4,James,"1-11-17",56
5,James,"1-12-17",58

基本上,名称和日期列在这个场景中起着主键的作用。我希望根据这两列的匹配情况进行更新,否则将创建一个新记录。如您所见,ID4覆盖了ID2,但ID5追加了,因为日期列不匹配。谢谢大家

不将目标读入数据帧是什么意思?请记住,spark是懒惰的,所以在您对其执行操作之前,将文件“读取”到数据帧实际上不会做任何事情。在这种情况下,最简单的方法是进行连接。例如,当spark执行覆盖时。它是否将目标上存在的数据加载到数据帧中?如果是,那么我的问题就得到了回答。我只是希望覆盖功能比将整个目标数据集加载到数据帧中的过程更轻松。Spark是计算引擎,而不是数据库。若要在基于文件的数据库中写入,它不支持单记录更新。所以对于您的情况,您可以使用cassandra之类的数据库,它支持具有高写入吞吐量的更新(如果插入相同的主键)。