当前位置: 首页 > 知识库问答 >
问题:

在pyspark中创建一个包含一列元组的dataframe

裴华荣
2023-03-14

我有一个包含以下[('列1',值),('列2',值),('列3',值),…,('列100',值)]的RDD。我想创建一个包含带有元组的单个列的数据框。

我得到的最接近的是:

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'))

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

共有1个答案

段铭晨
2023-03-14

结构是表示 Spark SQL 中产品类型(如元组)的正确方法,这正是您使用代码获得的内容:

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不再支持)或将pickle对象存储为<code>BinaryType

此外,结构字段在本地表示为元组

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

我想当你打电话给Show时,你可能会被方括号弄糊涂:

df.show()

## +-----+
## | pair|
## +-----+
## |[a,1]|
## +-----+

它们只是由JVM对应物呈现的选择表示,并不表示Python类型。

 类似资料:
  • 问题内容: 在下面的示例中,我希望所有元素都是元组,为什么当元组仅包含单个字符串时,它会转换为字符串? 问题答案: 因为前两个元素不是元组;他们只是字符串。括号不会自动使它们成为元组。你必须在字符串后添加一个逗号,以指示python它应该是一个元组。 要修复示例代码,请在此处添加逗号: 从Python文档: 一个特殊的问题是包含0或1项的元组的构造:语法具有一些额外的怪癖来容纳这些项。空元组由一对

  • 假设我有一个pyspark数据帧: 我想添加一个名为的列,它计算大于0的值的数量。 最终输出将是: 我正在尝试这个。但是,它没有帮助,错误如下: 参数无效,不是字符串或列:

  • 问题内容: 我正在尝试打开文件并创建一个列表,其中每行都从文件中读取。 但是由于这样说,这个示例代码给了我一个错误。我这是什么问题 我如何编写代码以增加InFile中每个新行的列表数? 问题答案: 比这容易得多: 这将返回文件中每一行的列表。

  • 问题内容: 如果我有一个字符串,并且想要创建一个最初 仅 包含该字符串的集合,那么是否有比以下方法更Python化的方法? 以下是给我的一组字母: 问题答案: 在2.7和3.x中,可以使用:

  • 首先,我要说我有0个js知识,我试着从W3中拼凑起来 null null 正如你所看到的,当我点击JohnSmith时,什么也不会发生,但当我点击按钮时,它就能正常工作 我也想让johnsmith工作

  • 问题内容: 我正在寻找以下所有替代方案,以创建一个包含1到N的JavaScript数组,其中N仅在运行时才知道。 在我看来,应该有一种没有循环的方法。 问题答案: 如果我能得到想要的结果,则需要一个数字数组,以后可以循环使用。 如果这是您所需要的,您可以代替吗? 然后在您要使用它时…(未优化,例如) 例如,如果您不需要在数组中 存储 任何内容,则只需要一个长度合适的容器即可进行迭代……这可能会更容