Как заменить значение, включая столбец в структуреPython

Программы на Python
Ответить
Anonymous
 Как заменить значение, включая столбец в структуре

Сообщение Anonymous »

Когда я использую DataFrame.replace, он не заменяет значения, находящиеся в структуре.
В этом примере он не заменяет значение my_struct.struct_string< /код>:
from awsglue.context import GlueContext
from pyspark.context import SparkContext
from pyspark.sql.functions import col
from pyspark.sql.types import StringType, StructType, StructField

glueContext = GlueContext(SparkContext.getOrCreate())

data = [
("null", {"struct_string": "null"}),
]

schema = StructType([
StructField("a_string", StringType(), True),
StructField(
"my_struct",
StructType([
StructField("struct_string", StringType(), True),
]),
True
)
])

df = spark.createDataFrame(data, schema)

df = df.replace("null", None)

df_astring = df.filter(col("a_string").isNotNull())
df_struct_string = df.filter(col("my_struct.struct_string").isNotNull())

print("My df_astring")
df_astring.show()
print("My df_struct_string")
df_struct_string.show()

Он печатает:
My df_astring
+--------+---------+
|a_string|my_struct|
+--------+---------+
+--------+---------+

My df_struct_string
+--------+---------+
|a_string|my_struct|
+--------+---------+
| null| {null}|
+--------+---------+

Обратите внимание, что я также пробовал df = df.replace("null", None, ["a_string", "my_struct.struct_string"]), но получаю исключение java.lang.UnsupportedOperationException: вложенное поле my_struct.struct_string не поддерживается.
Решение должно быть динамическим, поэтому оно не будет вручную точно указывать имя столбца, строка.
Ожидаемый результат:
My df_astring
+--------+---------+
|a_string|my_struct|
+--------+---------+
+--------+---------+

My df_struct_string
+--------+---------+
|a_string|my_struct|
+--------+---------+
+--------+---------+


Подробнее здесь: https://stackoverflow.com/questions/792 ... -structure
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»