ошибка преобразования вектора k-mean в реализации pyspark

#apache-spark #pyspark #jupyter-notebook

#apache-spark #pyspark #jupyter-ноутбук

Вопрос:

после предварительной обработки моих данных я получил окончательные данные

  ------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
|Acorn_grouped|    1|    2|    3|    4|    5|    6|    7|    8|    9|   10|   11|   12|
 ------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
|            1|711.0|607.0|567.0|453.0|364.0|303.0|304.0|296.0|320.0|420.0|618.0|637.0|
|            0|254.0|228.0|248.0|211.0|225.0|231.0|222.0|239.0|210.0|244.0|148.0|239.0|
|            0|133.0|116.0|115.0|126.0|118.0|118.0|136.0|151.0| 99.0|102.0|120.0|114.0|
 ------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
 

Я следовал некоторым руководствам и написал этот код

 from pyspark.ml.feature import VectorAssembler

vecAssembler = VectorAssembler(inputCols= 
["Acorn_grouped","1","2","3","4","5","6","7","8","9","10","11","12"], outputCol="features")
new_df = vecAssembler.transform(data)
new_df.show()
 

и я получил ошибку в строке

 new_df.show()
 

ошибка :

 ---------------------------------------------------------------------------
Py4JJavaError                             Traceback (most recent call last)
<ipython-input-29-f51d3e043cb1> in <module>
----> 1 new_df.show()

~anaconda3libsite-packagespysparksqldataframe.py in show(self, n, truncate, vertical)
438         """
439         if isinstance(truncate, bool) and truncate:
--> 440             print(self._jdf.showString(n, 20, vertical))
441         else:
442             print(self._jdf.showString(n, int(truncate), vertical))

~anaconda3libsite-packagespy4jjava_gateway.py in __call__(self, *args)
1302 
1303         answer = self.gateway_client.send_command(command)
-> 1304         return_value = get_return_value(
1305             answer, self.gateway_client, self.target_id, self.name)
1306 

~anaconda3libsite-packagespysparksqlutils.py in deco(*a, **kw)
126     def deco(*a, **kw):
127         try:
--> 128             return f(*a, **kw)
129         except py4j.protocol.Py4JJavaError as e:
130             converted = convert_exception(e.java_exception)

~anaconda3libsite-packagespy4jprotocol.py in get_return_value(answer, gateway_client, target_id, 
name)
324             value = OUTPUT_CONVERTER[type](answer[2:], gateway_client)
325             if answer[1] == REFERENCE_TYPE:
--> 326                 raise Py4JJavaError(
327                     "An error occurred while calling {0}{1}{2}.n".
328                     format(target_id, ".", name), value)

Py4JJavaError: An error occurred while calling o176.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 18 in stage 82.0 failed 1 
times, most recent failure: Lost task 18.0 in stage 82.0 (TID 3309, DESKTOP-7ETJDI1, executor 
driver): org.apache.spark.SparkException: Failed to execute user defined 
function(VectorAssembler$Lambda$3412/0x00000001013eb840:
(struct<Acorn_grouped_double_VectorAssembler_9457afd2c7aa:double,1:double,2:double,3:double, 
4:double,5:d ouble,6:double,7:double,8:double,9:double,10:double,11:double,12:double>) => 
struct<type:tinyint,size:int,indices:array<int>,values:array<double>>)
 

кто-нибудь может помочь мне понять ошибку или исправить ее?

ps: что меня удивило, так это то, что когда я использовал данные из учебника, который похож на мой, он работает

Комментарии:

1. Скорее всего, это вызвано нулевыми значениями в фрейме данных. Векторный ассемблер не может принимать нули.

2. @mck я попробовал эту функцию для удаления нулей в фрейме данных и повторно выполнил код, но у меня все та же ошибка

3. затем, пожалуйста, покажите полную обратную трассировку ошибок — недостаточно информации для отладки этой проблемы.

4. @mck я попытался выполнить код сейчас в новой неотбуке, он работает, я не знаю, почему ххххх, но, наконец, это происходит, все равно спасибо