PySpark 使用 Float TypeError 创建 DataFrame
PySpark Create DataFrame With Float TypeError
我有如下数据集:
我正在使用 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'
显然,如果我从 temperature= fields[3]*0.3
中删除 0.3,则创建 DataFrame 有效。我怎样才能 return 带有浮点数和一些基本数学运算的 temperature
?
试试 temperature= float(fields[3])*0.3
你可以先不乘法读取文件,然后将其转换为 Double 类型,最后进行乘法。
我假设你的 csv 文件有 header.
以下代码用于转换:
data = data.withColumn("COLUMN_NAME", data["COLUMN_NAME"].cast("double"))
我有如下数据集:
我正在使用 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'
显然,如果我从 temperature= fields[3]*0.3
中删除 0.3,则创建 DataFrame 有效。我怎样才能 return 带有浮点数和一些基本数学运算的 temperature
?
试试 temperature= float(fields[3])*0.3
你可以先不乘法读取文件,然后将其转换为 Double 类型,最后进行乘法。
我假设你的 csv 文件有 header.
以下代码用于转换:
data = data.withColumn("COLUMN_NAME", data["COLUMN_NAME"].cast("double"))