Вы можете разделить поле адреса в ,
на массив, убрать скобку и снова разделить в #
, чтобы извлечь нужные компоненты адреса, как показано ниже:
val department_rdd = sc.parallelize(Seq(
"328;ADMIN HEARNG;[street#939 W El Camino,city#Chicago,state#IL]",
"400;ADMIN HEARNG;[street#800 First Street,city#San Francisco,state#CA]"
))
val department_record = department_rdd.
map(_.split(";")).
map{ case Array(id, name, address) =>
val addressArr = address.split(",").
map(_.replaceAll("^\\[|\\]$", "").split("#"))
(id, name, addressArr(0)(1), addressArr(1)(1), addressArr(2)(1))
}
department_record.collect
// res1: Array[(String, String, String, String, String)] = Array(
// (328,ADMIN HEARNG,939 W El Camino,Chicago,IL),
// (400,ADMIN HEARNG,800 First Street,San Francisco,CA)
// )
InЕсли вы хотите преобразовать в DataFrame, просто примените toDF()
:
department_record.toDF("id", "name", "street", "city", "state").show
// +---+------------+----------------+-------------+-----+
// | id| name| street| city|state|
// +---+------------+----------------+-------------+-----+
// |328|ADMIN HEARNG| 939 W El Camino| Chicago| IL|
// |400|ADMIN HEARNG|800 First Street|San Francisco| CA|
// +---+------------+----------------+-------------+-----+