apache-spark - 如何安全地删除不属于架构的列?
问题描述
我有一个包含列的数据框:[A, B, ... M]
和一个只需要数据框中的少数列的模式:
StructType([StructField(A, StringType(), False),
StructField(C, StringType(), True),
StructField(K, StringType(), True)])
由于我不拥有架构,因此我没有所有可用列的列表。有没有办法根据架构安全有效地选择列?
解决方案
“更安全”的方法是检查提供的模式中的每一列是否存在于数据框中,并使用列表理解选择所有存在的列:
schema = StructType([StructField("A", StringType(), False),
StructField("C", StringType(), True),
StructField("K", StringType(), True)])
df2 = df.select(*[c for c in schema.names if c in df.columns])
推荐阅读
- apache-spark - Kafka 偏移量在处理流时丢失
- webrtc - 如何在不知道入站 RTP 流的往返时间 (RTT) 的情况下计算平均意见分数 (MOS) 以衡量 WebRTC 调用的质量?
- laravel - Laravel 5.7 Notification -> line 没有转义 html 的选项,但它在 5.5 中工作
- ssl - Google Cloud Platform 上的 SSL 证书
- java - 如何在Spring中从@Autowired List<>的每个bean中获取@Qualifier
- mysql - 使用外键删除 MySQL 多表
- php - 使用 getlog() 执行的最后一个查询不会显示在 cake2php 中
- html - NodeJS 未检测或删除抓取的 HTML 中的问号 (?)
- azure-databricks - 将 Databricks 数据帧写入 BLOB 存储
- mysql - 如何在 mysql 的表中获取每个日期的唯一 SKU 计数(自学问题)