Я создал фрейм данных pyspark, как показано ниже:
df = spark.createDataFrame([([0.1,0.2], 2), ([0.1], 3), ([0.3,0.3,0.4], 2)], ("a", "b"))
df.show()
+---------------+---+
| a| b|
+---------------+---+
| [0.1, 0.2]| 2|
| [0.1]| 3|
|[0.3, 0.3, 0.4]| 2|
+---------------+---+
Теперь я пытаюсь проанализировать столбец 'a' по одной строке за раз, как показано ниже:
parse_col = udf(lambda row: [ x for x in row.a], ArrayType(FloatType()))
new_df = df.withColumn("a_new", parse_col(struct([df[x] for x in df.columns if x == 'a'])))
new_df.show()
Это отлично работает.
+---------------+---+---------------+
| a| b| a_new|
+---------------+---+---------------+
| [0.1, 0.2]| 2| [0.1, 0.2]|
| [0.1]| 3| [0.1]|
|[0.3, 0.3, 0.4]| 2|[0.3, 0.3, 0.4]|
+---------------+---+---------------+
Но когда я пытаюсь отформатировать значения, как показано ниже:
count_empty_columns = udf(lambda row: ["{:.2f}".format(x) for x in row.a], ArrayType(FloatType()))
new_df = df.withColumn("a_new", count_empty_columns(struct([df[x] for x in df.columns if x == 'a'])))
new_df.show()
Не работает - отсутствуют значения
+---------------+---+-----+
| a| b|a_new|
+---------------+---+-----+
| [0.1, 0.2]| 2| [,]|
| [0.1]| 3| []|
|[0.3, 0.3, 0.4]| 2| [,,]|
+---------------+---+-----+
Я использую spark v2.3.1
Есть идеи, что я здесь не так делаю?
Спасибо