PySpark UDF возвращает строку, но мне нужно целое число - PullRequest
0 голосов
/ 13 июля 2020

У меня есть этот код, в котором я возвращаю из UDF целочисленный тип, но система меняет его на строку.

Как я могу это исправить?

# Define a UDF to determine the number of pixels per image
def dogPixelCount(doglist):
totalpixels = 0
for dog in doglist:
    totalpixels += (dog[3] - dog[1]) * (dog[4] - dog[2])
return totalpixels

# Define a UDF for the pixel count
udfDogPixelCount = F.udf(dogPixelCount, IntegerType())
joined_df = joined_df.withColumn('dog_pixels', udfDogPixelCount('dogs'))

# Create a column representing the percentage of pixels
joined_df = joined_df.withColumn('dog_percent', ('dog_pixels' / sum('dog_pixels') ) * 100 )

# Show the first 10 annotations with more than 60% dog
joined_df.filter(dog_percent > 60).show(10)

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Без полного контекста, похоже, вам нужно использовать функции col / sum из pyspark.sql.functions, а не строку имени столбца (dog_pixels) и встроенную функцию sum. Попробуйте это:

import pyspark.sql.functions as F
...

joined_df = joined_df.withColumn('dog_percent', (F.col('dog_pixels') / F.sum('dog_pixels') ) * 100 )
0 голосов
/ 13 июля 2020

В Python просто используйте простой синтаксис x = int (String), например:

num = '10'
  
# check and print type num variable 
print(type(num))  
  
# convert the num into string  
converted_num = int(num) 
  
# print type of converted_num 
print(type(converted_num)) 
  
# We can check by doing some mathematical operations 
print(converted_num + 20)
result:
<class 'str'>
<class 'int'>
30

, чтобы преобразовать вашу строку в целое число. Так что давайте поместим int (YourStringNeededToConvert) , чтобы преобразовать его в целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...