PySpark show_profile () ничего не печатает с операциями API DataFrame - PullRequest
0 голосов
/ 31 января 2019

Pyspark использует cProfile и работает в соответствии с документацией для RDD API, но, похоже, нет способа заставить профилировщик печатать результаты после выполнения нескольких операций API DataFrame?

from pyspark import SparkContext, SQLContext
sc = SparkContext()
sqlContext = SQLContext(sc)
rdd = sc.parallelize([('a', 0), ('b', 1)])
df = sqlContext.createDataFrame(rdd)
rdd.count()         # this ACTUALLY gets profiled :)
sc.show_profiles()  # here is where the profiling prints out
sc.show_profiles()  # here prints nothing (no new profiling to show)

rdd.count()         # this ACTUALLY gets profiled :)
sc.show_profiles()  # here is where the profiling prints out in DataFrame API

df.count()          # why does this NOT get profiled?!?
sc.show_profiles()  # prints nothing?!

# and again it works when converting to RDD but not 

df.rdd.count()      # this ACTUALLY gets profiled :)
sc.show_profiles()  # here is where the profiling prints out

df.count()          # why does this NOT get profiled?!?
sc.show_profiles()  # prints nothing?!

1 Ответ

0 голосов
/ 31 января 2019

Это ожидаемое поведение.

В отличие от RDD API, который обеспечивает собственную логику Python, DataFrame / SQL API являются собственными JVM.Если вы не вызываете Python udf* (включая pandas_udf), на рабочих машинах код Python не выполняется.Все, что делается на стороне Python, - это простые вызовы API через шлюз Py4j.

Поэтому никакой информации о профилировании не существует.


* Обратите внимание, что udf кажетсябыть исключенным из профилирования.

...