1818from base64 import standard_b64encode as b64enc
1919import copy
2020from collections import defaultdict
21+ from collections import namedtuple
2122from itertools import chain , ifilter , imap
2223import operator
2324import os
@@ -47,6 +48,7 @@ def _extract_concise_traceback():
4748 with function name, file name and line number
4849 """
4950 tb = traceback .extract_stack ()
51+ callsite = namedtuple ("Callsite" , "function file linenum" )
5052 if len (tb ) == 0 :
5153 return None
5254 file , line , module , what = tb [len (tb ) - 1 ]
@@ -59,18 +61,18 @@ def _extract_concise_traceback():
5961 break
6062 if first_spark_frame == 0 :
6163 file , line , fun , what = tb [0 ]
62- return { " function" : fun , " file" : file , " line" : line }
64+ return callsite ( function = fun , file = file , linenum = line )
6365 sfile , sline , sfun , swhat = tb [first_spark_frame ]
6466 ufile , uline , ufun , uwhat = tb [first_spark_frame - 1 ]
65- return { " function" : sfun , " file" : ufile , "line" : uline }
67+ return callsite ( function = sfun , file = ufile , linenum = uline )
6668
6769_spark_stack_depth = 0
6870
6971class _JavaStackTrace (object ):
7072 def __init__ (self , sc ):
7173 tb = _extract_concise_traceback ()
7274 if tb is not None :
73- self ._traceback = "%s at %s:%s" % (tb [ " function" ] , tb [ " file" ] , tb [ "line" ] )
75+ self ._traceback = "%s at %s:%s" % (tb . function , tb . file , tb . linenum )
7476 else :
7577 self ._traceback = "Error! Could not extract traceback info"
7678 self ._context = sc
0 commit comments