【发布时间】:2018-11-07 05:12:37
【问题描述】:
我的要求是将 DataFrame 中的所有 Decimal 数据类型转换为 String。 Logic 在简单类型上工作正常,但在 ArrayType 上不工作。 这是逻辑:-
var df = spark.sql("select * from test_1")
for(dt <- df.dtypes) {
if(dt._2.substring(0,7) == "Decimal"){
df = df.withColumn(dt._1,df(dt._1).cast("String"))
}
}
但是arrayType中的列保持不变,尽管它们是十进制类型。请帮忙,我如何循环嵌套元素并将其转换为字符串。 这是我的数据框的架构:
scala> df.schema res77: org.apache.spark.sql.types.StructType = StructType(StructField(mstr_prov_id,StringType,true), StructField(prov_ctgry_cd,StringType,true), StructField(prov_orgnl_efctv_dt,TimestampType,true), StructField(prov_trmntn_dt,TimestampType,true), StructField(prov_trmntn_rsn_cd,StringType,true), StructField(npi_rqrd_ind,StringType,true), StructField(prov_stts_aray_txt,ArrayType(StructType(StructField(PROV_STTS_KEY,DecimalType(22,0),true), StructField(PROV_STTS_EFCTV_DT,TimestampType,true), StructField(PROV_STTS_CD,StringType,true), StructField(PROV_STTS_TRMNTN_DT,TimestampType,true), StructField(PROV_STTS_TRMNTN_RSN_CD,StringType,true)),true),true))
【问题讨论】:
-
您必须编写一个 UDF,将数组中的每个小数转换为 string.it,因为列的类型是小数数组
-
你能分享这个需求的示例代码吗?我正在寻找实现此任务的 UDF。
-
即使我知道,我仍需要一个 UDF,它会遍历数组元素,并将所有 Decimal 类型转换为 String。但我不知道如何编写该代码。因此,寻找相同的示例代码(UDF)。
-
您想将 prov_stts_aray_txt 列中的所有数据更改为字符串?是这样吗?
-
@RameshMaharjan ,prov_stts_aray_txt 中只有十进制类型的字段,必须转换为字符串。我尝试了很多,但找不到任何线索。
标签: scala apache-spark apache-spark-sql