我想创建一个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'])
我也不知道我是否应该将整数列表映射到元组列表,或者它是否只是工作"。
答案 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]|
+------------------------------+
我希望答案很有帮助