使用spark-submit的方法运行以下Python代码结构时,代码只得到前几个url处理后的结果,之后的url代码并未做处理,且代码没有报错,这种情况该如何解决: def get_page_message(m, url, pageId, secret, start_time, end_time, pageNum, pageSize): timestamp_ms = int(time.time() * 1000) params = { 'time': timestamp_ms, 'pageId': pageId, 'startTime': start_time, 'endTime': end_time, 'pageNum': pageNum, 'pageSize': pageSize, } response = requests.get(url, params=params) html = response.text data = json.loads(html) if data['data']['data'] != []: head_list = data['data'] ...... 数据处理 else: print('无数据') return_data_num = 0 this_time_num = 0 return return_data_num, this_time_num def get_page_message_all(m, url_page, pageId, secret, start_time, end_time, pageNum, pageSize): return_data_num, this_time_num = get_page_message(m, url_page, pageId, secret, start_time, end_time, pageNum, pageSize) leave_data_num = return_data_num - this_time_num # 剩下的数据量 while leave_data_num > 0: pageNum = pageNum + 1 return_data_num, this_time_num = get_page_message(m, url_page, pageId, secret, start_time, end_time, pageNum, pageSize) leave_data_num = leave_data_num - this_time_num time.sleep(60) a = [] b = [] for m in range(len(pageid_list)): pageId = pageid_list[m] get_page_message_all(m, url_page, pageId, secret, start_time, end_time, pageNum, pageSize) time.sleep(60) answer_pd= pd.DataFrame() answer_pd['a'] = a answer_pd['b'] = b conf = SparkConf().setAppName("APP").setMaster("yarn").setSparkHome("/usr/xxx/xx/xxx") sc = SparkContext(conf=conf) hc = HiveContext(sc) dt = 'database.table' # 数据库和表名 hc.setConf("hive.exec.dynamic.partition.mode", "nonstrict") hc.createDataFrame(answer_pd).write.mode("append").insertInto(dt)
时间: 2024-04-16 17:25:45 浏览: 17
在使用spark-submit运行代码时,可能会遇到以下几种情况导致只处理了前几个url而后面的url没有被处理:
1. 数据量过大导致内存不足:如果处理的url数量较大,可能会导致内存不足而无法处理所有的url。可以尝试增加集群资源或者优化代码以减少内存占用。
2. 网络请求超时或失败:如果网络请求超时或失败,可能会导致部分url没有被处理。可以在代码中添加异常处理逻辑,例如重试机制,以确保所有的url都能被正确处理。
3. 数据处理逻辑问题:在代码中可能存在逻辑问题,导致后面的url没有被正确处理。可以检查数据处理逻辑,确认是否有遗漏或错误的地方。
为了解决这个问题,可以尝试以下几点:
1. 检查日志和错误信息:可以查看spark-submit运行的日志和错误信息,以确定是否有任何异常或警告信息。
2. 增加日志输出:在代码中增加日志输出语句,以便在运行过程中查看输出信息,确定代码是否正常运行。
3. 检查数据处理逻辑:仔细检查数据处理逻辑,确保没有遗漏或错误的地方。可以使用调试工具或打印输出来辅助检查。
4. 增加错误处理逻辑:在代码中添加适当的错误处理逻辑,例如重试机制或错误日志记录,以确保所有的url都能被正确处理。
5. 增加异常处理逻辑:在网络请求部分增加异常处理逻辑,例如捕获请求超时或失败的异常,并进行适当的处理,例如重试或跳过当前url。
通过以上步骤,您可以逐步排查问题并解决代码只处理前几个url的情况。