По моему опыту df.rdd.getNumPartitions
очень быстро, я никогда не сталкивался с тем, чтобы это занимало больше секунды или около того.
Кроме того, вы также можете попробовать
val numPartitions: Long = df
.select(org.apache.spark.sql.functions.spark_partition_id()).distinct().count()
, что позволит избежать использования .rdd
Общее решение - использовать вместо него android.os.Handler, который выполняется в потоке пользовательского интерфейса. Он выполняет только однократные обратные вызовы, поэтому вам придется запускать его снова каждый раз, когда вызывается ваш обратный вызов. Но пользоваться им достаточно просто. Сообщение в блоге по этой теме было написано пару лет назад:
http://android-developers.blogspot.com/2007/11/stitch-in-time.html
То, что я думаю, происходит, Вы падаете с потока UI. Существует единственный поток "выполняющего мертвую петлю летчика", который обрабатывает все экранные обновления. При попытке звонить, "делают недействительным ()", и Вы не находитесь на этом потоке, ничего не произойдет.
использование Попытки "постделают недействительным ()" на Вашем представлении вместо этого. Это позволит Вам обновить представление, когда Вы не будете в текущем потоке UI.
[еще 113] информация здесь