簡體   English   中英

如何調試Spark中的ClassCastException錯誤?

[英]How to debug ClassCastException error in Spark?

當我在pyspark中嘗試通過elasticsearch-spark連接器5.1.2從Spark 2.1.1到Elasticsearch 2.4進行簡單讀取時(ES_READ_FIELD_EXCLUDE和ES_READ_FIELD_AS_ARRAY_INCLUDE是環境變量,其余是作為參數傳遞給我的讀取函數或包含在其中的變量在自我對象中):

df = spark.read.format("org.elasticsearch.spark.sql") \
            .option("es.net.proxy.http.host", self.server) \
            .option("es.net.proxy.http.port", self.port) \
            .option("es.net.http.auth.user", self.username) \
            .option("es.net.http.auth.pass", self.password) \
            .option("es.net.proxy.http.user", self.username) \
            .option("es.net.proxy.http.pass", self.password) \
            .option("query", qparam) \
            .option("pushdown", "true") \
            .option("es.read.field.exclude",ES_READ_FIELD_EXCLUDE) \
            .option("es.read.field.as.array.include",ES_READ_FIELD_AS_ARRAY_INCLUDE) \
            .load(self.index) \
            .limit(limit) \
            .select(*fields) \
            .withColumn("id", monotonically_increasing_id())

我收到此ClassCastException錯誤(從Double到Long):

WARN scheduler.TaskSetManager: Lost task 42.0 in stage ...: java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long
at scala.runtime.BoxesRunTime.unboxToLong(BoxesRunTime.java:105) ...

奇怪的是,有時它會起作用,有時卻不會。 我懷疑讀取具有NULL值的數據或某些字段不包含任何內容的數據會導致問題,但這只是一個假設,我可能錯了。

有什么方法可以更好地跟蹤錯誤,我不知道在哪里看。

我發現了問題。 首先,我為火花彈性搜索連接器(6.0.0-beta1)使用了最新的開發版本,希望它可以解決問題。 事實並非如此,但是這次錯誤消息提供了更多信息:

org.elasticsearch.hadoop.EsHadoopIllegalArgumentException:
Incompatible types found in multi-mapping: 
Field [my_problematic_field] has conflicting types of [LONG] and [DOUBLE].

現在,我從一開始就很早就了解了強制轉換類異常。 它與我的字段相關,該字段在一個索引中定義為long,在另一個索引中定義為double(我在ES中使用一個索引別名來指向一系列索引)。 問題在於,這些字段是在ES第一次在其各自的索引中插入時由ES動態映射的,其中一些字段已強制轉換為長(因為第一個值為例如123),而其他字段則強制轉換為double(因為第一個值為例如123.0)。

我不知道是否有辦法解決這個問題而不必重新索引我的所有數據(數十億!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM