Steven's Blog

A Dream Land of Peace!

使用Spark的MLlib进行机器学习

1.比如我们有个 case class

1
case class CaseClassTest(user: String, name: String)

我们通过使用mapPartitions来进行操作, 注意此处mapPartitions的用法:

1
2
3
4
5
6
val mapResult = spark.read.textFile(input).map(_.split("\t")).mapPartitions {
      iter =>
        iter.map {
          iterms => CaseClassTest(iterms(0), iterms(1))
        }
    }

2.reduceByKeycase` 的用法

1
2
3
4
5
6
7
8
9
val data = gowalla.map {
      check: CheckIn => (check.user, (1L, Set(check.time), Set(check.location)))
    }.rdd.reduceByKey{
      case (left, right) => (left._1 + right._1, left._2.union(right._2),left._3.union(right._3))
    }.map{
      case (_, (checkins, days:Set[String], locations:Set[String])) =>
        Vectors.dense(checkins.toDouble, days.size.toDouble, locations.size.toDouble)
        //次数,天数,地点数
    }

reduceByKey 这里是求 (1L, Set(check.time), Set(check.location)) 中的一个元素累加,第二个元素求并集,第三个元素也是求并集. case 的作用是让输入符合规范; 注意在 map 中,我们可以限定指示变量的类型, 比如这里的 check: CheckIn =>

参考

  1. Spark机器学习进阶实战

Mac上单机起PySpark遇到的问题debug

今天在本地起个pyspark 发现总是遇到

1
Caused by: java.net.UnknownHostException: master: nodename nor servname provided, or not known

尝试了设置 SPARK_HOME, HADOOP_HOME 等变量之后,依然不起作用。

最后发现是要修改 SPARK_HOME 里面的配置文件spark-env.sh

1
2
export SPARK_MASTER_IP=StevenMac
export SPARK_LOCAL_IP=StevenMac

并且在/etc/hosts 文件中,加入如下的内容:

1
127.0.0.1  StevenMac

Bingo!!!

Python中不输出warning的信息

我们在Python 代码中,如果不想输出一些warnings, 可以在代码的一开始,加入如下的代码,就可以了.

1
2
import warnings
warnings.filterwarnings('ignore')

filterwarnings 函数可以带参数的,上述的方式是把所有的warnings都给ignore了.