如何将dataframe的pyspark列中包含的unicode列表转换为float列表?

2024-10-02 10:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个数据帧,如图所示

   import ast
   from pyspark.sql.functions import udf
   values = [(u'['2','4','713',10),(u'['12','245']',20),(u'['101','12']',30)]
   df = sqlContext.createDataFrame(values,['list','A'])
   df.show()
   +-----------------+---+
   |             list|  A|
   +-----------------+---+
   |u'['2','4','713']| 10|
   |  u' ['12','245']| 20|
   |  u'['101','12',]| 30|
   +-----------------+---+

**How can I convert the above dataframe such that each element in the list is a float and is within a proper list**
I tried the below one :

   def df_amp_conversion(df_modelamp):
      string_list_to_list = udf(lambda row: ast.literal_eval(str(row)))
      df_modelamp  = df_modelamp.withColumn('float_list',string_list_to_list(col("list")))

   df2 = amp_conversion(df)

但数据保持不变。 我不想转换数据帧熊猫或使用收集,因为它是内存密集型。 如果可能的话,试着给我一个最佳的解决方案。我用的是pyspark


Tags: the数据importdfstringisfloatast
2条回答

那是因为你忘了打字

udf(lambda row: ast.literal_eval(str(row)), "array<integer>")

虽然这样做会更有效率:

^{pr2}$

我可以在python3中创建真正的结果,只需稍微修改一下函数df_amp_conversion的定义。您没有返回df_modelamp的值!此代码适用于我:

import ast
from pyspark.sql.functions import udf, col
values = [(u"['2','4','713']",10),(u"['12','245']",20),(u"['101','12']",30)]

df = sqlContext.createDataFrame(values,['list','A'])


def df_amp_conversion(df_modelamp):
    string_list_to_list = udf(lambda row: ast.literal_eval(str(row)))
    df_modelamp  = df_modelamp.withColumn('float_list',string_list_to_list(col("list")))
    return df_modelamp

df2 = df_amp_conversion(df)
df2.show()

#    +       -+ -+     -+
#    |           list|  A| float_list|
#    +       -+ -+     -+
#    |['2','4','713']| 10|[2, 4, 713]|
#    |   ['12','245']| 20|  [12, 245]|
#    |   ['101','12']| 30|  [101, 12]|
#    +       -+ -+     -+

相关问题 更多 >

    热门问题