如何使用SparkSession从列表创建数据框?

时间:2018-03-20 16:32:09

标签: python apache-spark pyspark

我想创建一个pyspark数据框,其中包含一个包含一系列整数的指定名称列(这是为了提供给ALS模型的suggestForUserSubset方法)。

所以我使用范围创建了一个整数列表,并发现this question显示了如何使用SQLContext将列表创建到数据框中。但由于我使用的是SparkSession API,而不是较旧的API,我不知道如何创建SQLContext - 而且根据SQLContext上的documentation,我可能不应该这样做:"从Spark 2.0开始,它被SparkSession取代。但是,为了向后兼容,我们将此类保留在此处。"

这是我试图替换的代码:

dataset = sqlContext.createDataFrame(range(i, i+1000), ['session_idx'])

我也不知道我是否应该将整数列表映射到元组列表,或者它是否只是工作"。

2 个答案:

答案 0 :(得分:1)

在这种情况下,SparkSession上存在相同的方法(spark.createDataFrame)。

但是,对于获取范围列的特定用例,还有一种专用方法:

dataset = spark.range(i, i + 1000)
dataset = dataset.withColumnRenamed('id', 'user_idx')

答案 1 :(得分:0)

i=0
dataset = sqlContext.createDataFrame(range(i, i+10), ['session_idx'])

肯定会给你错误

  
    

TypeError:无法推断类型的架构:

  

错误是因为range(i, i+10)必须如api文档

中所述
  
    

data:任何类型的SQL数据表示的RDD(例如,row,tuple,int,boolean等),或: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]|
+------------------------------+

我希望答案很有帮助