就地圆形 Spark DataFrame
Round Spark DataFrame in-place
我将 .csv 文件读取到 Spark DataFrame。对于 DoubleType 列,有没有办法在读取文件时指定该列应四舍五入到小数点后两位?我还为 DataFrameReader API 调用提供了自定义模式。这是我的架构和 API 调用:
val customSchema = StructType(Array(StructField("id_1", IntegerType, true),
StructField("id_2", IntegerType, true),
StructField("id_3", DoubleType, true)))
#using Spark's CSV reader with custom schema
#spark == SparkSession()
val parsedSchema = spark.read.format("csv").schema(customSchema).option("header", "true").option("nullvalue", "?").load("C:\Scala\SparkAnalytics\block_1.csv")
将文件读入 DataFrame 后,我可以像这样四舍五入小数:
parsedSchema.withColumn("cmp_fname_c1", round($"cmp_fname_c1", 3))
但这会创建一个新的 DataFrame,所以我还想知道是否可以就地完成它而不是创建一个新的 DataFrame。
谢谢
您可以在加载 CSV 文件时为 customSchema
中的 DoubleType 列指定 DecimalType(10, 2)。假设您有一个包含以下内容的 CSV 文件:
id_1,id_2,Id_3
1,10,5.555
2,20,6.0
3,30,7.444
下面的示例代码:
import org.apache.spark.sql.types._
val customSchema = StructType(Array(
StructField("id_1", IntegerType, true),
StructField("id_2", IntegerType, true),
StructField("id_3", DecimalType(10, 2), true)
))
spark.read.format("csv").schema(customSchema).
option("header", "true").option("nullvalue", "?").
load("/path/to/csvfile").
show
// +----+----+----+
// |id_1|id_2|id_3|
// +----+----+----+
// | 1| 10|5.56|
// | 2| 20|6.00|
// | 3| 30|7.44|
// +----+----+----+
我将 .csv 文件读取到 Spark DataFrame。对于 DoubleType 列,有没有办法在读取文件时指定该列应四舍五入到小数点后两位?我还为 DataFrameReader API 调用提供了自定义模式。这是我的架构和 API 调用:
val customSchema = StructType(Array(StructField("id_1", IntegerType, true),
StructField("id_2", IntegerType, true),
StructField("id_3", DoubleType, true)))
#using Spark's CSV reader with custom schema
#spark == SparkSession()
val parsedSchema = spark.read.format("csv").schema(customSchema).option("header", "true").option("nullvalue", "?").load("C:\Scala\SparkAnalytics\block_1.csv")
将文件读入 DataFrame 后,我可以像这样四舍五入小数:
parsedSchema.withColumn("cmp_fname_c1", round($"cmp_fname_c1", 3))
但这会创建一个新的 DataFrame,所以我还想知道是否可以就地完成它而不是创建一个新的 DataFrame。
谢谢
您可以在加载 CSV 文件时为 customSchema
中的 DoubleType 列指定 DecimalType(10, 2)。假设您有一个包含以下内容的 CSV 文件:
id_1,id_2,Id_3
1,10,5.555
2,20,6.0
3,30,7.444
下面的示例代码:
import org.apache.spark.sql.types._
val customSchema = StructType(Array(
StructField("id_1", IntegerType, true),
StructField("id_2", IntegerType, true),
StructField("id_3", DecimalType(10, 2), true)
))
spark.read.format("csv").schema(customSchema).
option("header", "true").option("nullvalue", "?").
load("/path/to/csvfile").
show
// +----+----+----+
// |id_1|id_2|id_3|
// +----+----+----+
// | 1| 10|5.56|
// | 2| 20|6.00|
// | 3| 30|7.44|
// +----+----+----+