我想把字典列表转换成Dataframe。以下是列表:
mylist =
[
{"type_activity_id":1,"type_activity_name":"xxx"},
{"type_activity_id":2,"type_activity_name":"yyy"},
{"type_activity_id":3,"type_activity_name":"zzz"}
]
这是我的密码:
from pyspark.sql.types import StringType
df = spark.createDataFrame(mylist, StringType())
df.show(2,False)
+-----------------------------------------+
| value|
+-----------------------------------------+
|{type_activity_id=1,type_activity_id=xxx}|
|{type_activity_id=2,type_activity_id=yyy}|
|{type_activity_id=3,type_activity_id=zzz}|
+-----------------------------------------+
我假设我应该为每一列提供一些Map和类型,但是我不知道怎么做。
更新:
我也试过这个:
schema = ArrayType(
StructType([StructField("type_activity_id", IntegerType()),
StructField("type_activity_name", StringType())
]))
df = spark.createDataFrame(mylist, StringType())
df = df.withColumn("value", from_json(df.value, schema))
但后来我 null
价值观:
+-----+
|value|
+-----+
| null|
| null|
+-----+
4条答案
按热度按时间toe950271#
你可以这样做。您将得到一个包含2列的Dataframe。
输出:
nkcskrwz2#
在过去,你只需要把字典传给
spark.createDataFrame()
,但现在不赞成这样做:正如警告信息所说,您应该使用
pyspark.sql.Row
相反。我用过这里
**
(关键字参数解包)将字典传递给Row
建造师。jpfvwuh43#
在spark版本2.4中,可以直接使用df=spark.createdataframe(mylist)执行此操作
zpf6vheq4#
我在创作时也面临着同样的问题
dataframe
从字典列表中。我已经解决了这个问题namedtuple
.下面是我的代码使用提供的数据。
输出
我的版本信息如下
没有必要有
my_list
变量。因为它是可用的,所以我用它直接创建namedtuple对象namedtuple
可以创建对象。