0

尝试用 Blaze 和我的本地 Spark 实例做一些相当简单的事情。使用 blaze 的 into() 加载 csv 文件,然后使用 blaze 的 by()

Python 3.4
Spark 1.4.0
Blaze 0.8.0

csv(简单的.csv)

   id,car
    1,Mustang
    2,Malibu
    3,Mustang
    4,Malibu
    5,Murano

代码

mport blaze as bz
rdd = bz.into(sc,"simple.csv")
simple = bz.Data(rdd)
simple.count()  #gives me 5 so far so good
bz.by(simple.car, count=simple.id.count()) #throws an error
AttributeError: 'InteractiveSymbol' object has no attribute 'car'

关于这里发生了什么的任何想法?

边注; 这行得通

simple_csv = bz.Data("simple.csv")
bz.by(simple_csv.car, count=simple_csv.id.count())
    car     count
0   Malibu  2
1   Murano  1
2   Mustang 2

这也是

simple_csv.car.count_values()
    car count
0   Malibu  2
2   Mustang 2
1   Murano  1

一定是我将它“加载”到 Spark 中的方式,对吧?

4

1 回答 1

1

您需要SchemaRDD使用 a 创建 Spark DataFrame(以前称为 ),SQLContext而不是RDD使用SparkContext. RDDs 没有命名列,您需要这些列才能使by操作成功。这就是为什么InteractiveSymbol没有car属性,它在创建RDD. 在 Jupyter 代码单元中执行此操作:

import pyspark
from pyspark.sql import SQLContext

sc = pyspark.SparkContext()
sqlContext = SQLContext(sc)

from odo import odo
simple = odo('simple.csv', sqlContext)
simple.count()

将产生一个pyspark.sql.dataframe.DataFrame对象,并在 Spark 驱动程序上执行一个程序来计算行数:

>>> 5

此时,您应该能够像之前尝试的那样计算分组依据:

import blaze as bz
bz.by(simple.car, count=simple.id.count())

但。Blaze至少对我而言,到目前为止0.9.0,在 Spark 1.6 和 Spark 1.4.1上运行 Blaze存在问题。可能,这与您最初遇到的问题不同,但它使我无法找到可行的解决方案。我尝试删除 Jupyter,并pyspark直接在会话中运行。要自己这样做,您可以省略上面的几行,因为pyspark会自动创建scand sqlContext

$ pyspark
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 1.4.1
      /_/

Using Python version 2.7.11 (default, Dec  6 2015 18:57:58)
SparkContext available as sc, HiveContext available as sqlContext.

from odo import odo
simple = odo('simple.csv', sqlContext)
import blaze as bz
bz.by(simple.car, count=simple.id.count())

这会产生错误。即使只是试图获得这样的交互式视图simple也会产生错误:

simple

无论如何,Github 上的 Blaze 项目中似乎有一些与升级对 Spark 1.6 的支持相关的活动,所以希望他们能在那时修复这些东西。

于 2016-01-25T00:38:22.667 回答