PySpark создает фрейм данных с ошибкой типа Float - PullRequest
0 голосов
/ 11 июля 2020

У меня есть наборы данных, как показано ниже:

введите описание изображения здесь

Я использую PySpark для анализа данных и создания DataFrame позже, используя приведенный ниже код:

from pyspark.sql import SparkSession
from pyspark.sql import Row
from pyspark.sql import functions as f

def parseInput(line):
    fields = line.split(',')
    stationID=fields[0]
    entryType=fields[2]
    temperature= fields[3]*0.3
    return Row(stationID,entryType,temperature)

spark = SparkSession.builder.appName("MinTemperatures").getOrCreate()
lines = spark.sparkContext.textFile("data/1800.csv")
temperatures = lines.map(parseInput)
minTemps=temperatures.filter(lambda x:x[1]=='TMIN')
df = spark.createDataFrame(minTemps)

Я получил ошибку ниже:

TypeError: can't multiply sequence by non-int of type 'float'

Очевидно , если я удалю 0,3 из temperature= fields[3]*0.3, создание DataFrame сработает. Как я могу вернуть temperature с числом с плавающей запятой и некоторыми математическими операциями c?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Вы можете сначала прочитать файл без умножения, а затем преобразовать его в Type Double и, наконец, выполнить умножение.

Я предполагаю, что ваш файл csv имеет заголовок. Следующий код предназначен для приведения:

data = data.withColumn("COLUMN_NAME", data["COLUMN_NAME"].cast("double"))
1 голос
/ 11 июля 2020

Попробуйте temperature = float (поля [3]) * 0,3

...