【问题标题】:How to convert a key and list of values to a dataframe in pyspark?如何将键和值列表转换为pyspark中的数据框?
【发布时间】:2015-08-14 07:13:26
【问题描述】:

我有一个包含键和值的文本文件,其中一些值丢失了,

key1 12 13 na
key1 na 11 11
key1 12 13 11
key2 11 12 10
key3 10 11 10
key3 na na na

我想填补缺失的值,所以我做到了(数据是我的 rdd)

def fill_na(x):
    ldf = Df(list(x))
    df_with_na = ldf #df_with_na.toPandas()
    df_with_mode = df_with_na.fillna(df_with_na.mode().iloc[0])
    return_list = df_with_mode.values.tolist()
    return return_list

data1 = data.mapValues(fill_na).flatMapValues(f)

现在 data1 看起来像:

data1.collect() 

(key1 ,[12 13 11])
(key1 ,[12 11 11])
(key1 ,[12 13 11])
(key2 ,[11 12 10])
(key3 ,[10 11 10])
(key3 ,[10 11 10])

现在我希望将上面的 data1 写入我尝试过的数据帧/表中

data1.toDF().toPandas() 

但我遇到了错误

TypeError: StringType can not accept object in type <type 'float'>

1)如何写入数据框? 2)如何将键和列表转换为如下所示的单个元组?

(key1 ,11,12,13)

这样我就可以直接写入dataframe了?

提前致谢:)

【问题讨论】:

  • 您能否使用没有任何 pyspark 细节的脚本将该文件读入 Pandas 数据帧?
  • 这是一个示例,我的文件很大,所以我必须使用 pyspark

标签: pandas apache-spark apache-spark-sql pyspark spark-dataframe


【解决方案1】:

来自Spark programming guide on DataFrames and SQL,试试这个:

from pyspark.sql import SQLContext, Row

df = data.map(lambda (k, v): Row(k, v[0], v[1], v[2])).toDF()

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多