Доступ к постоянным величинам из шаблона Apache Velocity?

Ответ Танджина должен работать, хотя я хотел бы предложить другой подход. Вместо того, чтобы узнать, сколько столбцов вы должны добавить в свою схему, чтобы создать столбец типа массив / список. Следующий код преобразует ваши данные в rdd, который вместо кортежей содержит строки [key, value], где value - это список типа double. Тогда вы можете легко применить схему ниже.

def test():
    l = [('a', 0.0), 
    ('b', 6), 
    ('c', 44), 
    ('d', 107), 
    ('e', 0), 
    ('f', 3), 
    ('g', 4), 
    ('h', 0.025599999353289604), 
    ('i', 0.03239999711513519), 
    ('j', -0.03205680847167969), 
    ('k',0.10429033637046814), 
    ('l',(34.190006256103516, 31.09000015258789, 31.099994659423828)), 
    ('m',(-9.32000732421875, -9.32000732421875, -11.610000610351562))]

    # this schema should work for all your cases 
    schema = StructType([
        StructField("id", StringType(), False),
        StructField("num_list", ArrayType(DoubleType(), True), True)
    ])

    rdd = spark.sparkContext.parallelize(l).map(lambda r: (r[0], to_float_list(r[1])))

    df = spark.createDataFrame(rdd, schema)

    df.show(100, False)

def to_float_list(value):
    if type(value) is tuple:  
        return list(map(float, value))

    return [float(value)]

Обратите внимание, что функция to_float_list принимает либо кортеж, либо число и преобразует его в список типа double. Это выведет:

+---+-----------------------------------------------------------+
|id |num_list                                                   |
+---+-----------------------------------------------------------+
|a  |[0.0]                                                      |
|b  |[6.0]                                                      |
|c  |[44.0]                                                     |
|d  |[107.0]                                                    |
|e  |[0.0]                                                      |
|f  |[3.0]                                                      |
|g  |[4.0]                                                      |
|h  |[0.025599999353289604]                                     |
|i  |[0.03239999711513519]                                      |
|j  |[-0.03205680847167969]                                     |
|k  |[0.10429033637046814]                                      |
|l  |[34.190006256103516, 31.09000015258789, 31.099994659423828]|
|m  |[-9.32000732421875, -9.32000732421875, -11.610000610351562]|
+---+-----------------------------------------------------------+
15
задан Simon Nickerson 29 September 2008 в 13:14
поделиться