如何删除pysparkDataframe中的数组元素?

5us2dqdw  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(501)

我想从这个数组中删除条形码。
我的数据框看起来像下面给出的示例,

|-- variants: array (nullable = true)

 |    |-- element: struct (containsNull = true)

 |    |    |-- admin_graphql_api_id: string (nullable = true)

 |    |    |-- barcode: string (nullable = true)

 |    |    |-- compare_at_price: string (nullable = true)

你能帮我用pyspark从Dataframe中删除元素吗。

68de4m5k

68de4m5k1#

您可以使用数组\u-zip:

from pyspark.sql.types import ArrayType, StringType, StructType, StructField
df = df.withColumn("variants", F.arrays_zip("variants.admin_graphql_api_id", "variants.compare_at_price"))
df = df.withColumn("variants", F.col("variants").cast(schema))
df.printSchema()

印刷品

root
 |-- variants: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- admin_graphql_api_id: string (nullable = true)
 |    |    |-- compare_at_price: string (nullable = true)

第二个 withColumn 需要设置新结构的字段名。 arrays_zip 仅适用于spark版本>=2.4.0。如果您使用的是较旧的spark版本,则可以使用自定义项:

def func(array):
    return [[x.admin_graphql_api_id, x.compare_at_price] for x in array]
func_udf = F.udf(func, schema)
df = df.withColumn("variants", func_udf("variants"))

相关问题