我正在使用pyspark读取json文件,如下所示:
raw = sc.textFile(path)
dataset_df = sqlContext.read.json(raw)
因此,要仅从json文件中选择特定键(如果存在键),我使用:
dataset_df.select('countryName', 'city', 'age')
但是,我从上面的行中得到以下错误,注意到``输入列周围的字符给出错误,我没有指定那些我列出我想从json文件中选择的键时):
“无法解析'`countryName`'给定输入列:[countryName','city',”age“] \ n”
当我从csv中读取密钥列表中删除countryName
时出现类似错误。我已经测试了json文件中的其他键,对于一些,上面的代码运行没有问题但是对于特定的列我得到上面显示的错误。
有谁知道这背后的原因是什么?
提前致谢。
答案 0 :(得分:1)
最后,我找到了解决方案:
所以问题是由于我读取的一些json文件可能没有我正在寻找的所有密钥。在这种情况下,文件没有特定的密钥,我得到了我报告的错误。为了解决这个问题,我只需检查是否在这个特定的json文件中找到了一个密钥。如果找不到,我将其替换为None
(这可能是我用来表示缺失值的任何值)。
以下是生成的代码:
raw = sc.textFile(path)
dataset_df = sqlContext.read.json(raw)
all_columns_being_used = ["countryName", 'city', "age"]
for column_name in all_columns_being_used:
if not column_name in dataset_df.columns:
pre_feature_set = dataset_df.withColumn(column_name, lit(None))