PYSPARK:在读取csv文件时将字符串转换为float

时间:2016-10-07 19:43:34

标签: python apache-spark pyspark

我正在将csv文件读取到dataframe

datafram = spark.read.csv(fileName, header=True)

但datafram中的数据类型是String,我想将数据类型更改为float。有效的方法吗?

2 个答案:

答案 0 :(得分:3)

实现这一目标最直接的方法是通过施放。

dataframe = dataframe.withColumn("float", col("column").cast("double"))

答案 1 :(得分:3)

如果要在读取CSV时进行转换,可以在读取数据时使用inferSchema参数。让我们尝试一个小测试csv文件:

$ cat ../data/test.csv
a,b,c,d
5.0, 1.0, 1.0, 3.0
2.0, 0.0, 3.0, 4.0
4.0, 0.0, 0.0, 6.0

现在,如果我们像你一样阅读它,我们将有字符串值:

>>> df_csv = spark.read.csv("../data/test.csv", header=True)
>>> print(df_csv.dtypes)
[('a', 'string'), ('b', 'string'), ('c', 'string'), ('d', 'string')]

但是,如果我们将inferSchema设置为True,它会将它们正确识别为双打:

>>> df_csv2 = spark.read.csv("../data/test.csv", header=True, inferSchema=True)
>>> print(df_csv2.dtypes)
[('a', 'double'), ('b', 'double'), ('c', 'double'), ('d', 'double')]

但是,这种方法需要对数据进行另一次运行。您可以在DataFrameReader CSV documentation找到更多信息。