如何在Spark SQL中从列表创建数据框?

Lia*_*eng 16 python apache-spark pyspark

Spark版本:2.1

例如,在pyspark中,我创建一个列表

test_list = [['Hello', 'world'], ['I', 'am', 'fine']]

那么如何从test_list创建一个数据框,其中数据框的类型如下所示:

DataFrame[words: array<string>]

Pus*_*hkr 23

这是怎么做的 -

from pyspark.sql.types import *

cSchema = StructType([StructField("WordList", ArrayType(StringType()))])

# notice extra square brackets around each element of list 
test_list = [['Hello', 'world']], [['I', 'am', 'fine']]

df = spark.createDataFrame(test_list,schema=cSchema) 
Run Code Online (Sandbox Code Playgroud)

  • 对于只想转换字符串列表并因缺乏适当文档而给人留下深刻印象的任何人:您无法转换1d对象,则必须将其转换为一个元组列表,如:[[t,)for list_of_strings中的t] (4认同)
  • 为什么建议使用“from ... import *”(几乎普遍被认为是 Python 中的反模式)? (3认同)

Gra*_*non 10

我不得不处理多个列和类型-下面的示例有一个字符串列和一个整数列。对Pushkr的代码(略)稍作调整即可:

from pyspark.sql.types import *

cSchema = StructType([StructField("Words", StringType())\
                      ,StructField("total", IntegerType())])

test_list = [['Hello', 1], ['I am fine', 3]]

df = spark.createDataFrame(test_list,schema=cSchema) 
Run Code Online (Sandbox Code Playgroud)

输出:

 df.show()
 +---------+-----+
|    Words|total|
+---------+-----+
|    Hello|    1|
|I am fine|    3|
+---------+-----+
Run Code Online (Sandbox Code Playgroud)

  • 我在另一个答案中问过同样的问题:为什么“from ... import *”(几乎普遍被认为是Python中的反模式)在这里是可取的? (2认同)

ham*_*una 6

您应该使用行对象列表([行])创建数据框。

from pyspark.sql import Row

spark.createDataFrame(list(map(lambda x: Row(words=x), test_list)))
Run Code Online (Sandbox Code Playgroud)