Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 多个spark作业写入同一配置单元分区的外部表-spark 2.3_Apache Spark_Hive_Apache Spark Sql_Parquet - Fatal编程技术网

Apache spark 多个spark作业写入同一配置单元分区的外部表-spark 2.3

Apache spark 多个spark作业写入同一配置单元分区的外部表-spark 2.3,apache-spark,hive,apache-spark-sql,parquet,Apache Spark,Hive,Apache Spark Sql,Parquet,我有一个蜂巢外部桌子MyTable,带有分区(加载日期:String,加载类型:String)存储为拼花地板。作用 loadData(start,end)是一个包装函数,它的末尾有一个spark动作df.insertinto()。以loadData(2019010120190103)的输入调用此函数将创建以下HDFS目录结构 load_date=2019101/type=A load_date=2019101/type=B load_date=2019102/type=A load_date=2

我有一个蜂巢外部桌子
MyTable
,带有
分区(加载日期:String,加载类型:String)
存储为拼花地板。作用
loadData(start,end)
是一个包装函数,它的末尾有一个spark动作
df.insertinto()
。以
loadData(2019010120190103)
的输入调用此函数将创建以下HDFS目录结构

load_date=2019101/type=A
load_date=2019101/type=B
load_date=2019102/type=A
load_date=2019102/type=B
load_date=2019103/type=A
load_date=2019103/type=B


def loadData(start,end):
       .... 
       // dynamic insert for start to end date range
       df.write.mode(SaveMode.Overwrite).insertInto(MyTable) // for type A
       ....
       df.write.mode(SaveMode.Overwrite).insertInto(MyTable) // for Type B
注意-由于某些原因,上述函数中的2
insertinto()
按顺序运行。 在单个spark应用程序中,我旋转多个spark作业,这些作业写入
Mytable
,但每个作业都写入一个单独的分区,类似于-

val interval= [ (20190101,20190105), (20190106,20190110), (20190111,20190115), .....]

interval.grouped(3).foreach(grp => grp.par.foreach(slot => loadData(slot._1,slot._2))
3个作业按预期并行触发,应用程序成功完成。但是在输出HDFS位置,我看到一些随机分区丢失了

例如,
type=B
分区在
load\u date=201910101
to
20190105

load_date=20190101/type=A
load_date=20190102/type=A
load_date=20190103/type=A
load_date=20190104/type=A
load_date=20190105/type=A
load_date=20190106/type=A
load_date=20190107/type=A
load_date=20190108/type=A
load_date=20190109/type=A
load_date=201901010/type=A
load_date=20190106/type=B
load_date=20190107/type=B
load_date=20190108/type=B
load_date=20190109/type=B
load_date=201901010/type=B

请检查201910101到20190105之间的数据,df实际上有类型=B的记录。是的,它有,这里没有缺失数据问题。如果我只运行一个作业,而不是并行运行,我将获得预期的所有分区。是否每次都保持一致,您将失去201910101到20190105?是否尝试对仅在日期20190101到20190105,然后在日期20190106到20190110运行作业进行故障排除?你可能会得到一些线索。不,是随机的。有时我会得到201910101到20190105的所有分区,但在其他时间间隔内会丢失分区。我一次运行3个作业,间隔。分组(3)。foreach。将20190101传递到20190105将只触发一个作业,因此我猜该作业应该不会出现任何问题。我的interval变量如下所示--val interval=[(2019010120190105)]overwrite将覆盖该目录中的所有分区,即最后写入的分区数据将在hdfs中可用。。您使用的是什么版本的spark?请检查201910101到20190105之间的数据,df实际上有type=B的记录。是的,这里没有丢失数据的问题。如果我只运行一个作业,而不是并行运行,我将获得预期的所有分区。是否每次都保持一致,您将失去201910101到20190105?是否尝试对仅在日期20190101到20190105,然后在日期20190106到20190110运行作业进行故障排除?你可能会得到一些线索。不,是随机的。有时我会得到201910101到20190105的所有分区,但在其他时间间隔内会丢失分区。我一次运行3个作业,间隔。分组(3)。foreach。将20190101传递到20190105将只触发一个作业,因此我猜该作业应该不会出现任何问题。我的interval变量如下所示--val interval=[(2019010120190105)]overwrite将覆盖该目录中的所有分区,即最后写入的分区数据将在hdfs中可用。。你用的是什么版本的spark??