火花红移。将数组展平为字符串
Spark to redshift. Flatten array to string
我正在尝试使用 spark-redshift 连接器将嵌套的 JSON 保存到红移
问题是 redshift 不接受数据帧的结构,因为它有一个数组
所以我的问题是,有没有办法将列 foo 和 bar 的数组展平并将它们的值转换为字符串?
这是我到目前为止将项目作为数组获取的内容
val basketItems = df.select($"OrderContainer.BasketInfo.BasketId",
$"OrderContainer.BasketInfo.MenuId",
explode($"OrderContainer.BasketInfo.Items")).toDF("BasketId","MenuId","Items")
这是我正在使用的 json(为了便于阅读而格式化):
{
"OrderContainer":{
"BasketInfo":{
"BasketId":"kjOIxlJFc0WYdQXm2AXksg",
"MenuId":119949,
"Items":[
{
"ProductId":12310,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
},
{
"ProductId":456323,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
},
{
"ProductId":23432432,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
}
]
}
}
}
仅供参考
我已经通过创建一个使数组成为字符串的函数解决了这个问题。
val mkString = udf((a: Seq[Any]) => a.mkString(","))
确保导入 udf 函数。
那么你只需要使用 withColumn 函数即可。
.withColumn("foo", mkString($"foo"))
我正在尝试使用 spark-redshift 连接器将嵌套的 JSON 保存到红移
问题是 redshift 不接受数据帧的结构,因为它有一个数组
所以我的问题是,有没有办法将列 foo 和 bar 的数组展平并将它们的值转换为字符串?
这是我到目前为止将项目作为数组获取的内容
val basketItems = df.select($"OrderContainer.BasketInfo.BasketId",
$"OrderContainer.BasketInfo.MenuId",
explode($"OrderContainer.BasketInfo.Items")).toDF("BasketId","MenuId","Items")
这是我正在使用的 json(为了便于阅读而格式化):
{
"OrderContainer":{
"BasketInfo":{
"BasketId":"kjOIxlJFc0WYdQXm2AXksg",
"MenuId":119949,
"Items":[
{
"ProductId":12310,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
},
{
"ProductId":456323,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
},
{
"ProductId":23432432,
"UnitPrice":5.5,
"foo":[1,2,3],
"bar":["a","b","c"]
}
]
}
}
}
仅供参考
我已经通过创建一个使数组成为字符串的函数解决了这个问题。
val mkString = udf((a: Seq[Any]) => a.mkString(","))
确保导入 udf 函数。
那么你只需要使用 withColumn 函数即可。
.withColumn("foo", mkString($"foo"))