2024-05-16 23:17:36 发布
网友
假设我有一个python字典键值对的列表,其中的键对应于表的列名,那么对于下面的列表,如何将其转换为具有两个col arg1 arg2的pyspark数据帧?
[{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""}]
如何使用以下构造来执行此操作?
df = sc.parallelize([ ... ]).toDF
将arg1 arg2放在上述代码中的位置(…)
对于那些想找到不同解决方案的人,我发现这对我很有效: 我有一个带键值对的字典-我想把它转换成两个PySpark dataframe列:
所以
{k1:v1, k2:v2 ...}
变成
---------------- | col1 | col2 | |----------------| | k1 | v1 | | k2 | v2 | ---------------- lol= list(map(list, mydict.items())) df = spark.createDataFrame(lol, ["col1", "col2"])
为了让它在运行Spark 2.0的python2.7中为我工作,我不得不修改接受的答案。
from collections import OrderedDict from pyspark.sql import SparkSession, Row spark = (SparkSession .builder .getOrCreate() ) schema = StructType([ StructField('arg1', StringType(), True), StructField('arg2', StringType(), True) ]) dta = [{"arg1": "", "arg2": ""}, {"arg1": "", "arg2": ""}] dtaRDD = spark.sparkContext.parallelize(dta) \ .map(lambda x: Row(**OrderedDict(sorted(x.items())))) dtaDF = spark.createDataFrame(dtaRdd, schema)
老办法:
sc.parallelize([{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""}]).toDF()
新方法:
from pyspark.sql import Row from collections import OrderedDict def convert_to_row(d: dict) -> Row: return Row(**OrderedDict(sorted(d.items()))) sc.parallelize([{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""},{"arg1": "", "arg2": ""}]) \ .map(convert_to_row) \ .toDF()
对于那些想找到不同解决方案的人,我发现这对我很有效: 我有一个带键值对的字典-我想把它转换成两个PySpark dataframe列:
所以
变成
为了让它在运行Spark 2.0的python2.7中为我工作,我不得不修改接受的答案。
老办法:
新方法:
相关问题 更多 >
编程相关推荐