我正在将一个JSON文件读入Scala中的spark数据框。我有一个像
这样的JSON字段"areaGlobalIdList":[2389,3,2,1,2147,2142,2518]
Spark会自动将此字段的数据类型推断为Array [long]。我试过concat_ws
,但似乎只适用于array [string]。当我尝试将其转换为数组[string]时,输出显示为
scala> val cmrdd = sc.textFile("/user/nkthn/cm.json")
scala> val cmdf = sqlContext.read.json(cmrdd)
scala> val dfResults = cmdf.select($"areaGlobalIdList".cast(StringType)).withColumn("AREAGLOBALIDLIST", regexp_replace($"areaGlobalIdList" , ",", "." ))
scala> dfResults.show(20,false)
+------------------------------------------------------------------+
|AREAGLOBALIDLIST |
+------------------------------------------------------------------+
|org.apache.spark.sql.catalyst.expressions.UnsafeArrayData@6364b584|
+------------------------------------------------------------------+
我期待输出
[2389.3.2.1.2147.2142.2518]
任何帮助都非常有帮助。
答案 0 :(得分:2)
将schema
列的areaGlobalIdList
视为
|-- areaGlobalIdList: array (nullable = true)
| |-- element: long (containsNull = false)
您可以使用简单的udf
函数
import org.apache.spark.sql.functions._
val concatWithDot = udf((array: collection.mutable.WrappedArray[Long]) => array.mkString("."))
df.withColumn("areaGlobalIdList", concatWithDot($"areaGlobalIdList")).show(false)