我有一个序列文件,已使用具有正确类格式的newAPIHadoopFile将其转换为RDD。
使用序列读取器将序列文件转换为字符串,其格式为:
[ key1, key2, key3 ] :
(
val1,
val2,
{ val3:
[
{id:"nested_val"},
{id:"nested_val"},
{id:"nested_val"},
{id:"nested_val"}
],
val4: "as",
val5: "df",
val6: 4,
}
)
我的最终目标是能够将此RDD转换为数据帧并进行一些处理。
在这里,我尝试访问nested_values,但得到null:
val rdd_mapped = rdd
.map({case(keys, value) => (keys.get(0).toString,value.get("val3")) })
.map({case(key_val, value_val) => Row(key_val, value_val) })
val schema = StructType(StructField("key_val", StringType, true) ::
StructField("value_val",StructType(
StructField("nested_val",
StringType, true) :: Nil))
:: Nil)
val df = spark.createDataFrame(rdd_mapped, schema)
df.show(2)
如果不尝试嵌套,则尝试打印val4 / val5即可。似乎我没有正确映射嵌套的值。
使用上面的代码,这就是我得到的:
+------------+------------+
|key_val |value_val |
+------------+------------+
|key1 | null|
+------------+------------+