apache-spark - Spark - 如何处理名称中包含空格的列

标签 apache-spark apache-spark-sql

我想知道如何从名称中包含空格的 Row 访问属性。

例如,我有这个 Row 对象

Row(ONE CATEGORY=u'category') 

如何访问ONE CATEGORY值。通常我会使用 row.oneCategory 来访问它,但在这种情况下,由于空格,这是不可能的。如果可能的话,我更喜欢 Python 中的建议。

谢谢

最佳答案

在Python中可以使用getattr功能:

row = Row("ONE CATEGORY")("category")
row
## Row(ONE CATEGORY='category')
getattr(row, u"ONE CATEGORY")
## 'category'

Row.asDict方法:

row.asDict()["ONE CATEGORY"]
## 'category'

由于您不能在 Scala 中使用点语法,所以这并不是一个真正的问题,但如果您想按名称访问字段,您可以使用 Row.getAs

val row = sc.parallelize(Tuple1("category") :: Nil).toDF("ONE CATEGORY").first
row.getAs[String]("ONE CATEGORY")

Row.getValuesMap:

row.getValuesMap[String](Seq("ONE CATEGORY"))("ONE CATEGORY")

在Python和Scala中,您可以通过索引访问值:

## row[0]
'category'
row(0)
// Any = category
row.getString(0)
// String = category

最后你可以在选择过程中使用alias方法来完全避免这个问题:

df.select(col("ONE CATEGORY").alias("ONE_CATEGORY"))

关于apache-spark - Spark - 如何处理名称中包含空格的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365853/

相关文章:

java - 尝试通过 Java + SparkSession 从 Cassandra DB 接收 JSON 数据时出错

hadoop - 使用 Yarn 运行 spark 作业时出现错误 :com. google.common.util.concurrent.Futures.withFallback

python - 用自定义函数模拟移动窗口

java - 为什么自定义接收器会失败并显示 "NoClassDefFoundError: scala/runtime/AbstractPartialFunction"?

python - 如何在 pySpark 数据框中添加行 ID

apache-spark - Spark - 广播 HashMap 并在转换中使用它

python - 使用 Spark 将文本文件导出到 PostgreSQL - 自动化

python - 如何优化 Spark SQL 中的非等值连接?

sql - 从 Hive 中的多个表中选择增量数据

apache-spark - 在S3中将sparkdataframe写入.csv文件,然后在pyspark中选择一个名称