我想知道如何从名称中包含空格的 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/