我有一个sparkR数据帧,cust_sales
,我只需要从列cust_id
中提取值CQ98901282
,在R中我们使用cust_sales$cust_id[3]
。
我的建议是我们可以使用getItem(x, ...)
提取,如果是这样的话参数"x"将是列cust_sales$cust_id
- 什么会出现在"…"
-
如果我的建议是错误的,
getItem(x, ...)
的用法是什么,它如何在我的例子中使用。+----------+----------+-----------+ | cust_id| date|Total_trans| +----------+----------+-----------+ |CQ98901280|2015-06-06| 1| |CQ98901281|2015-05-01| 1| |CQ98901282|2015-05-02| 1| |CQ98901283|2015-05-03| 1| |CQ98901284|2015-04-01| 6| |CQ98901285|2015-04-02| 8| |CQ98901286|2015-04-03| 13| |CQ98901287|2015-04-04| 3| |CQ98901288|2015-04-05| 3| |CQ98901289|2015-04-08| 16|
TIA,阿伦
Spark数据帧不支持随机行访问,您对getItem
函数的工作方式有错误的了解。它用于从非原子字段(如映射或数组)中提取数据:
> writeLines('{"foo": [0, 1], "bar": {"x": 3, "y": 4}}', "example.json")
> df <- SparkR::jsonFile(sqlContext, "example.json")
> printSchema(df)
root
|-- bar: struct (nullable = true)
| |-- x: long (nullable = true)
| |-- y: long (nullable = true)
|-- foo: array (nullable = true)
| |-- element: long (containsNull = true)
> select(df, getItem(df$bar, "x"), getItem(df$bar, "y")) %>% head()
bar[x] bar[y]
1 3 4
由于某些原因,我不能使它与数组工作,但使用PySpark
>>> df = sqlContext.read.json("example.json")
>>> df.select(df.foo.getItem(0)).show()
>>> df.select(df.foo.getItem(0), df.foo.getItem(1), df.bar.getItem("x")).show()
+------+------+------+
|foo[0]|foo[1]|bar[x]|
+------+------+------+
| 0| 1| 3|
+------+------+------+