我正在从json文件构建dataframe,模式在不断变化。下面是一个模式的示例。
root
|-- id: string (nullable = true)
|-- emprecords: array (nullable = true)
| |-- element: struct (containsNull = true)
| |-- emprec: array (nullable = true)
| |-- element: struct (containsNull = true)
| |-- firstName: string (nullable = true)
| |-- lastName: string (nullable = true)
| |-- email: string (nullable = true)
| |-- salary: integer (nullable = true)
Dataframe示例:
ID emprecords
201 [[[Bruce, William,….
202 Null
203 [[[Mickey,Arthur……..
204 Null
必须用空数组替换与ids 202和204相关联的行中存在的空值。这样做的原因是使用arrays\u zip函数将emprecords数组与另一个数组压缩,如果zip操作中包含的任何一个数组列为null,arrays\u zip函数将填充null。
我试过数组包含,转换函数捕捉和替换空值,但运气不好。
3条答案
按热度按时间eagi6jfj1#
源Dataframe中的架构将更改。因此,在编写udf时,我不能显式地使用任何列名。因此,以下是实现这一点的方法:
val colname=“array column name”即emprecords在本例中val colindex=df.columns.indexof(colname)//其中df是从json val arrschema=df.schema(colindex.datatype)//读取Dataframe的数组列的架构创建的Dataframe
val emptyarrudf=udf(()=>seq.empty[any],arrschema)//创建空数组的udf
val df_updated=df.withcolumn(colname,when(col(colname).isnull,emptyarrudf())。否则(col(colname)))
11dmarpk2#
筛选空值
emprecords
列添加(&A)array()
如果此列有空值,则保留原始数据。更新
定义空json
去拿那个
emprecords
来自当前Dataframe的列架构。使用
from_json
使用架构分析空记录。yeotifhr3#
也许这是有帮助的-
加载测试数据
替换空值