получил Исключение Нулевого Указателя, используя снежинку-искру-соединитель - PullRequest
1 голос
/ 26 апреля 2020

У меня есть 3-х узловый спарк-кластер. И пытается получить доступ к снежинке, используя искровой соединитель снежинки и драйвер jdb c

jdb c: снежинка-jdb c -3.12.4.jar искровой соединитель: spark-snowke_2.11-2.7. 0-spark_2.4.jar

Вот мой код:

sfOptions = {
  "sfURL" : "{}.snowflakecomputing.com".format(ACCOUNT_NAME),
  "sfUser" : "{}@fmr.com".format(USER_ID),
  "sfAccount" : "{}".format(ACCOUNT_ID),
  "sfRole" : "{}".format(DEFAULT_ROLE),
  "sfAuthenticator" : "oauth",
  "sfToken" : "{}".format(oauth_token),
  "sfDatabase" : "{}".format(DATABASE),
  "sfSchema" : "{}".format(SCHEMA),
  "sfWarehouse" : "{}".format(WAREHOUSE)
}

SNOWFLAKE_SOURCE_NAME = "net.snowflake.spark.snowflake"
....
conf = (SparkConf()
    .setMaster("spark://<master-url>")
    .setAppName("Spark-Snowflake-Connector")
    )


spark = (SparkSession.builder.config(conf=conf)
    .enableHiveSupport()
    .getOrCreate())
spark._jvm.net.snowflake.spark.snowflake.SnowflakeConnectorUtils.enablePushdownSession(spark._jvm.org.apache.spark.sql.SparkSession.builder().getOrCreate())


sdf = spark.read.format(SNOWFLAKE_SOURCE_NAME) \
   .options(**sfOptions) \
   .option("query",  "select * from TIME_AGE") \
   .load()
sdf.show()

Мой вызов не удался в sdf.show () со следующим исключением. Любые предложения?

20/04/26 09:54:55 ИНФОРМАЦИЯ DAGScheduler: сбой задания 0: showString at NativeMethodAccessorImpl. java: 0, отслеживание обратной связи заняло 5,494100 с (последний последний вызов): Файл "/fedata/a393831/snowflake/spark-driver.py", строка 114, в файле sdf.show () "/apps/shared/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py" , строка 378, в файле шоу "/apps/shared/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", строка 1257, в вызов Файл "/apps/shared/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", строка 63, в файле deco "/apps/shared/spark/python/lib/py4j-0.10.7- sr c .zip / py4j / protocol.py ", строка 328, в get_return_value py4j.protocol.Py4JJavaError: Произошла ошибка при вызове o68.showString. : org. apache .spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 0.0 не выполнено 4 раза, последний сбой: потерянное задание 0.3 на этапе 0.0 (TID 3, 10.240.62.46, исполнитель 0): java .lang.NullPointerException в net .snowflake.client.core.SFArrowResultSet.getObject (SFArrowResultSet. java: 570) в net .snowflake.client.jdb c .SnowflakeResultSject 1027 *: 336) в net .snowflake.spark.snowflake.io.ResultIterator $$ anonfun $ 2.apply (SnowflakeResultSetRDD. scala: 115) в net .snowflake.spark.snowflake.io.ResultIterator $$ anonfun $ 2.apply (SnowflakeResultSetRDD. scala: 114) в scala .collection.TraversableLike $$ anonfun $ map $ 1.apply (TraversableLike. scala: 234) в scala .collection.TraversableLike $$ anonfun $ карта $ 1.apply (TraversableLike. scala: 234) в scala .collection.immutable.Range.foreach (Range. scala: 160) в scala .collection.TraversableLike $ class.map (TraversableLike. *) 1039 *: 234) в scala .collection.AbstractTraversable.map (Traversable. scala: 104) a t net .snowflake.spark.snowflake.io.ResultIterator.next (SnowflakeResultSetRDD. scala: 114) в scala .collection.Iterator $$ anon $ 11.next (Iterator. scala: 410) в org . apache .spark. sql .execution.SparkPlan $$ anonfun $ 2.apply (SparkPlan. scala: 256) в org. apache .spark. sql .execution.SparkPlan $$ anonfun $ 2. применить (SparkPlan. scala: 247) в орг. apache .spark.rdd.RDD $$ anonfun $ mapPartitionsInternal $ 1 $$ anonfun $ применить $ 24.apply (СДР. scala: 836) в орг. apache .spark.rdd.RDD $$ anonfun $ mapPartitionsInternal $ 1 $$ anonfun $ apply $ 24.apply (RDD. scala: 836) в org. apache .spark.rdd.MapPartitionsRDD.compute (MapPartitionsRDD. scala : 52) в орг. apache .spark.rdd.RDD.computeOrReadCheckpoint (RDD. scala: 324) в орг. apache .spark.rdd.RDD.iterator (RDD. scala: 288) в org. apache .spark.scheduler.ResultTask.runTask (ResultTask. scala: 90) в org. apache .spark.scheduler.Task.run (Задача. scala: 121) в org. apache .spark.executor.Executor $ TaskRunner $$ anonfun $ 10.apply (Executor. scala: 408) в org. apache .spark.util.Utils $ .tryWithSafeFinally (Utils . scala: 1360)

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Похоже, что существует проблема с Snowflake JDB C 3.12.4 jar-версии при использовании с Spark Connector spark-snowke_2.11-2.7.0-spark_2.4.jar. Можно попробовать с 3.12.3 версией Снежинка водитель JDB C. Это хорошо работает с вышеуказанной версией Spark Connector.

0 голосов
/ 27 апреля 2020

У меня был тот же вопрос с тем же коннектором и конфигом драйвера. Мой запрос просто подсчитывал количество строк в таблице примеров SF - snowke_sample_data.tpch_sf1.lineitem.

"sfDatabase" -> "snowflake_sample_data",
"sfSchema" -> "tpch_sf1",
"query" -> "select count(*) from lineitem"

Так что я просто попробовал драйвер jdb c с версией 3.12.0, и он работает. Так что похоже на регресс в драйвере нового релиза.

...