如何使用 SparkSession 从列表中创建数据框?
Posted
技术标签:
【中文标题】如何使用 SparkSession 从列表中创建数据框?【英文标题】:How to create a dataframe from a list using SparkSession? 【发布时间】:2018-03-20 16:32:09 【问题描述】:我想创建一个 pyspark 数据框,其中一列包含一系列整数的指定名称(这是为了输入 ALS 模型的RecommendForUserSubset 方法)。
所以我使用范围创建了一个整数列表,并发现this question 展示了如何使用 SQLContext 将列表制作成数据框。但由于我使用的是 SparkSession API,而不是较旧的 API,我不知道如何创建 SQLContext——根据 SQLContext 上的documentation,我可能不必:“从 Spark 2.0 开始,这已被 SparkSession 取代。但是,我们将类保留在此处是为了向后兼容。”
这是我要替换的代码:
dataset = sqlContext.createDataFrame(range(i, i+1000), ['session_idx'])
我也不知道是否应该将整数列表映射到元组列表,或者它是否会“正常工作”。
【问题讨论】:
试图创建一个具有整数范围的列,我在第一句话中就说了。当我切换到在 spark 上调用 createDataFrame 时,上面确实给了我一个类型错误,我认为当我使用以下方法将它更改为元组列表时它会消失: [tuple(x) for x in range(i, i+ 1000)],但类型错误仍然存在。 “TypeError:无法推断类型的架构:在这种情况下,SparkSession 上存在相同的方法 (spark.createDataFrame)。
但是,对于获取范围列的特定用例,还有一种专用方法:
dataset = spark.range(i, i + 1000)
dataset = dataset.withColumnRenamed('id', 'user_idx')
【讨论】:
是的,在我回答完这个问题之前,我认为没有人会看到这个问题......我发布这个问题的目的是填补谷歌的空白,而不是真正获得帮助,因为“创建使用 sparksession pyspark 的列表中的数据框”并没有返回任何对我立即有用的东西,这是一个非常基本的问题,我认为每个人都不应该在刚接触 spark 时仔细阅读文档。【参考方案2】:i=0
dataset = sqlContext.createDataFrame(range(i, i+10), ['session_idx'])
肯定会给你错误
TypeError:无法推断类型的架构:
错误是因为range(i, i+10)
必须如下,如 api 文档中所述
data:任何类型的 SQL 数据表示(例如行、元组、int、布尔值等)的 RDD,或 :class:
list
或 :class:pandas.DataFrame
解决方案
只需将range(i, i+10)
列表设为
i=0
dataset = sqlContext.createDataFrame([range(i, i+10)], ['session_idx'])
这会给你
+-----------+---+---+---+---+---+---+---+---+---+
|session_idx|_2 |_3 |_4 |_5 |_6 |_7 |_8 |_9 |_10|
+-----------+---+---+---+---+---+---+---+---+---+
|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
+-----------+---+---+---+---+---+---+---+---+---+
或列表列表为
i=0
dataset = sqlContext.createDataFrame([[range(i, i+10),]], ['session_idx'])
这会产生
+------------------------------+
|session_idx |
+------------------------------+
|[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]|
+------------------------------+
希望回答对你有帮助
【讨论】:
以上是关于如何使用 SparkSession 从列表中创建数据框?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 stream().reduce() 基于谓词从一个列表中创建 2 个列表 [重复]