![](/img/trans.png)
[英]pandas_udf operating on two ArrayType(StringType()) fields
[英]ScalaTestFailureLocation Expected StructField(value1,ArrayType(StringType,true),false) Actual StructField(val2,ArrayType(StringType,true),true)
我正在嘗試運行一些測試。 亦即
assertDataFrameEquals(etalon, agg)
在2個數據幀上 但是得到以下錯誤
ScalaTestFailureLocation
Expected StructField(value1,ArrayType(StringType,true),false)
Actual StructField(value2,ArrayType(StringType,true),true)
從列表創建一個df
val etalon= spark.sparkContext.parallelize(data).toDF()
另一個是從某些輸入文件中計算得出的。
如果value2是String或其他某種類型,我可以做
etalon.na.fill()
在上面。 但這不適用於數組。 我還可以做些什么?
嘗試下面的代碼片段,此處將agg數據框的架構應用於標准具數據框,以便其架構一致。
var etalon = spark.sparkContext.parallelize(data).toDF()
val newSchema = agg.schema
etalon = spark.createDataFrame(etalon.rdd, newSchema)
assertDataFrameEquals(etalon, agg)
回答有關如何用任意值填充空數組的問題。 您可以制作一個UDF:
val replaceNulls = udf{ theArray: Seq[Int] => if (theArray==null) Seq.empty[Int] else theArray }
之后,您可以使用它:
yourDF.withColumn("nameColumn", replaceNulls(col("arrayColumn")))
但是,這不會解決您提到的問題,因為數據框的StructFields在nullable
參數中是不同的(StructField構造函數( StructField ): StructField(String name, DataType dataType, boolean nullable, Metadata metadata)
)以上給出的答案(使用彼此的架構來創建數據框,應該可以使用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.