假设我正在做这样的事情:
val df = sqlContext.load("com.databricks.spark.csv", Map("path" -> "cars.csv", "header" -> "true"))
df.printSchema()
root
|-- year: string (nullable = true)
|-- make: string (nullable = true)
|-- model: string (nullable = true)
|-- comment: string (nullable = true)
|-- blank: string (nullable = true)
df.show()
year make model comment blank
2012 Tesla S No comment
1997 Ford E350 Go get one now th...
但我真的希望将year
作为Int
(或许还可以转换一些其他列)。
我能想到的最好的办法就是
df.withColumn("year2", 'year.cast("Int")).select('year2 as 'year, 'make, 'model, 'comment, 'blank)
org.apache.spark.sql.DataFrame = [year: int, make: string, model: string, comment: string, blank: string]
这有点复杂。
我是从R来的,我习惯了能写作。
df2 <- df %>%
mutate(year = year %>% as.integer,
make = make %>% toupper)
我可能遗漏了一些东西,因为在Spark/Scala中应该有更好的方法来做到这一点……
发布于 2015-10-30 04:27:50
编辑:最新版本
从spark 2.x开始,你可以使用.withColumn
。请在此处查看文档:
最早的答案
从Spark版本1.4开始,您可以在列上应用带有DataType的cast方法:
import org.apache.spark.sql.types.IntegerType
val df2 = df.withColumn("yearTmp", df.year.cast(IntegerType))
.drop("year")
.withColumnRenamed("yearTmp", "year")
如果使用sql表达式,还可以执行以下操作:
val df2 = df.selectExpr("cast(year as int) year",
"make",
"model",
"comment",
"blank")
有关更多信息,请查看文档:http://spark.apache.org/docs/1.6.0/api/scala/#org.apache.spark.sql.DataFrame
发布于 2015-08-15 03:24:46
您可以使用selectExpr
使其更简洁一些:
df.selectExpr("cast(year as int) as year", "upper(make) as make",
"model", "comment", "blank")
发布于 2016-05-20 06:42:05
用于将DataFrame的数据类型从字符串修改为整数的Java代码
df.withColumn("col_name", df.col("col_name").cast(DataTypes.IntegerType))
它将简单地将现有的(字符串数据类型)转换为Integer。
https://stackoverflow.com/questions/29383107
复制相似问题