开发者社区> 问答> 正文

PySpark无法访问使用StringIndexer添加的列

PySpark无法访问使用StringIndexer添加的列
我试图将String列转换Country为Interger列Country_ID,结果看起来很好。但当我试图访问Country_ID我得到的列AnalysisException。

以下是数据帧:

UserIdCountry
1Africa
2Africa
3UK
4Japan
5UK
6Japan
7China

这是代码:

from pyspark.ml.feature import StringIndexer
indexer = StringIndexer(inputCol='Country', outputCol='Country_ID')
modified_df = indexer.fit(df).transform(df)
修改后的DataFrame:

modified_df.select('*').show()

UserIdCountryCountry_ID
1Africa1.0
2Africa1.0
3UK0.0
4Japan2.0
5UK0.0
6Japan2.0
7China3.0

过滤查询:

modified_df.select('UserId').filter(df['Country_ID'] == 2).show()
以下是例外情况:

AnalysisException: u'Cannot resolve column name "Country_ID" among (UserId, Country);'

我可以将列视为DataFrame的一部分

modified_df.columns
给,

['UserId', 'Country', 'Country_ID']
如何使DataFrame过滤条件有效Country_ID?

展开
收起
社区小助手 2018-12-19 15:49:10 2070 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我认为问题是您尝试使用错误的Dataframe引用访问该列。Country_ID应使用引用该列modified_df。

    所以改变

    modified_df.select('UserId').filter(df['Country_ID'] == 2).show()

    modified_df.select('UserId').filter(modified_df['Country_ID'] == 2).show()
    它应该工作。由于df没有任何专栏Country_ID。

    2019-07-17 23:22:58
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Apache Kudu & Apache Spark SQL 立即下载
Hive Bucketing in Apache Spark 立即下载
Hive-Bucke in Apache Spark 立即下载