apache spark - 在 pyspark 中创建一个包含单列元组的数据帧



我有一个RDD,其中包含以下内容[("列1",值),("列2",值),("列3",值),...,("列100",值)]。我想创建一个包含带有元组的单个列的数据帧。

我得到的最接近的是:

schema = StructType((StructField("char", StringType(), False), (StructField("count", IntegerType(), False))))
    my_udf = udf(lambda w, c: (w,c), schema)

然后

df.select(my_udf('char', 'int').alias('char_int'))

但这会产生一个包含一列列表(而不是元组)的数据帧。

>struct是在Spark SQL中表示产品类型的正确方法,例如tuple,这正是您使用代码获得的:

df = (sc.parallelize([("a", 1)]).toDF(["char", "int"])
    .select(my_udf("char", "int").alias("pair")))
df.printSchema()
## root
##  |-- pair: struct (nullable = true)
##  |    |-- char: string (nullable = false)
##  |    |-- count: integer (nullable = false)
没有

其他方法可以表示元组,除非您要创建 UDT(在 2.0.0 中不再受支持)或将酸洗的对象存储为 BinaryType

此外,struct字段在本地表示为tuple

isinstance(df.first().pair, tuple)
## True

我想当您致电show时,您可能会对方括号感到困惑:

df.show()
## +-----+
## | pair|
## +-----+
## |[a,1]|
## +-----+

它们只是JVM对应项选择渲染的表示,并不表示Python类型。

相关内容

  • 没有找到相关文章

最新更新