我有一个Spark Structured-Streaming应用程序,它从s3读取JSON数据并进行一些转换并将其写回s3。
在运行应用程序时,有时会出现作业错误并重新尝试(没有任何明显的丢失或数据损坏 - 所以一切看起来都很好),但提供的错误消息不是很具描述性
以下是错误消息:
pyspark.sql.utils.StreamingQueryException: u'assertion failed: Invalid batch: _ra_guest_gid#1883,_ra_sess_ts#1884,_ra_evt_ts#1885,event#1886,brand#1887,category#1888,funding_daysRemaining#1889,funding_dollarsRemaining#1890,funding_goal#1891,funding_totalBackers#1892L,funding_totalFunded#1893,id#1894,name#1895,price#1896,projectInfo_memberExclusive#1897,projectInfo_memberExclusiveHoursRemaining#1898,projectInfo_numberOfEpisodes#1899,projectInfo_projectState#1900,variant#1901 != _ra_guest_gid#2627,_ra_sess_ts#2628,_
我猜这可能与列不匹配有关,其中
传入的JSON记录不符合架构。
或者传入的JSON记录的数据类型可能与架构中提供的数据类型不匹配。
但我不确定如何确定哪条记录或哪个特定字段会导致错误。
此处提供有关错误含义或如何以更好的方式记录错误的任何帮助或建议。
由于
答案 0 :(得分:0)
我认为我已经找到了问题,它与模式不匹配无关。 在我的情况下发生的事情是我有两个并行运行的流操作。
1)从S3存储桶读取原始传入数据,然后执行某些操作并将其写回输出文件夹'a'中的S3
2)从文件夹'a'读取已处理的流数据(步骤1),然后再次执行某些操作并在输出文件夹'b'中写回S3
现在根据我的观察,如果我单独运行上述步骤然后它工作正常,但如果我一起运行它我得到错误
'pyspark.sql.utils.StreamingQueryException:u'assertion failed:无效批次:'
所以我认为它在尝试从同一位置读取和写入时遇到麻烦,即一个流的目的地是另一个流的来源