首页 文章

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

提问于
浏览
1

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

所以我使用range创建了一个整数列表,并找到了this question,显示了如何使用SQLContext将列表放入数据帧 . 但是,因为我知道如何创建一个SQLContext - 并且根据SQLContext上的documentation,我可能不应该这样做:"As of Spark 2.0, this is replaced by SparkSession. However, we are keeping the class here for backward compatibility."

这是我要替换的代码:

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

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

2 回答

  • 1

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

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

    dataset = spark.range(i, i + 1000)
    dataset = dataset.withColumnRenamed('id', 'user_idx')
    
  • 0
    i=0
    dataset = sqlContext.createDataFrame(range(i, i+10), ['session_idx'])
    

    certainly give you errors

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

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

    data:任何类型的SQL数据表示的RDD(例如,row,tuple,int,boolean等),或者:class:list,或者:class:pandas.DataFrame

    Solution

    只需使 range(i, i+10) a list

    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  |
    +-----------+---+---+---+---+---+---+---+---+---+
    

    a list of list

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

    这将产生

    +------------------------------+
    |session_idx                   |
    +------------------------------+
    |[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]|
    +------------------------------+
    

    我希望答案是有帮助的

相关问题