gas*_*shu 8 apache-spark apache-spark-sql pyspark pyspark-sql
我在各种json文件中有json数据而且键的行可能不同,例如
{"a":1 , "b":"abc", "c":"abc2", "d":"abc3"}
{"a":1 , "b":"abc2", "d":"abc"}
{"a":1 ,"b":"abc", "c":"abc2", "d":"abc3"}
Run Code Online (Sandbox Code Playgroud)
我想在列'b','c','d'和'f'上聚合数据,这些数据在给定的json文件中不存在,但可能存在于其他文件中.因为列'f'不存在,我们可以为该列取空字符串.
我正在读取输入文件并聚合这样的数据
import pyspark.sql.functions as f
df = spark.read.json(inputfile)
df2 =df.groupby("b","c","d","f").agg(f.sum(df["a"]))
Run Code Online (Sandbox Code Playgroud)
这是我想要的最终输出
{"a":2 , "b":"abc", "c":"abc2", "d":"abc3","f":"" }
{"a":1 , "b":"abc2", "c":"" ,"d":"abc","f":""}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?提前致谢!
Mar*_*usz 13
您可以检查colum是否在数据框中可用,并df仅在必要时进行修改:
if not 'f' in df.columns:
df = df.withColumn('f', f.lit(''))
Run Code Online (Sandbox Code Playgroud)
对于嵌套模式,您可能需要使用df.schema如下所示:
>>> df.printSchema()
root
|-- a: struct (nullable = true)
| |-- b: long (nullable = true)
>>> 'b' in df.schema['a'].dataType.names
True
>>> 'x' in df.schema['a'].dataType.names
False
Run Code Online (Sandbox Code Playgroud)
如果有人在 Scala 中需要这个:
if (!df.columns.contains("f")) {
val newDf = df.withColumn("f", lit(""))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11219 次 |
| 最近记录: |