4242__all__ = ["RDD" ]
4343
4444def _extract_concise_traceback ():
45+ """
46+ This function returns the traceback info for a callsite, returns a dict
47+ with function name, file name and line number
48+ """
4549 tb = traceback .extract_stack ()
4650 if len (tb ) == 0 :
47- return "I'm lost!"
48- # HACK: This function is in a file called 'rdd.py' in the top level of
49- # everything PySpark. Just trim off the directory name and assume
50- # everything in that tree is PySpark guts.
51+ return None
5152 file , line , module , what = tb [len (tb ) - 1 ]
5253 sparkpath = os .path .dirname (file )
5354 first_spark_frame = len (tb ) - 1
@@ -58,16 +59,20 @@ def _extract_concise_traceback():
5859 break
5960 if first_spark_frame == 0 :
6061 file , line , fun , what = tb [0 ]
61- return "%s at %s:%d" % ( fun , file , line )
62+ return { "function" : fun , " file" : file , " line" : line }
6263 sfile , sline , sfun , swhat = tb [first_spark_frame ]
6364 ufile , uline , ufun , uwhat = tb [first_spark_frame - 1 ]
64- return "%s at %s:%d" % ( sfun , ufile , uline )
65+ return { "function" : sfun , "file" : ufile , "line" : uline }
6566
6667_spark_stack_depth = 0
6768
6869class _JavaStackTrace (object ):
6970 def __init__ (self , sc ):
70- self ._traceback = _extract_concise_traceback ()
71+ tb = _extract_concise_traceback ()
72+ if tb is not None :
73+ self ._traceback = "%s at %s:%s" % (tb ["function" ], tb ["file" ], tb ["line" ])
74+ else :
75+ self ._traceback = "Error! Could not extract traceback info"
7176 self ._context = sc
7277
7378 def __enter__ (self ):
0 commit comments