Spark DataFrame 笔记

Spark DataFrame 笔记

记录一些DataFrame的常用操作,防止之后自己忘记,也方便查阅

1. 给一个DataFrame添加ID列

在使用Spark mllib的CountVectorize时候,数据格式是

id内容
0This is a sentence
1This is also a sentence
…………

但是很多时候,我们只有内容列,读入一个文本的时候,只有文本行,因此需要对文本添加ID列

解决办法,使用monotonically_increasing_id方法:

import org.apache.spark.sql.functions.monotonically_increasing_id

df.withColumn("id",monotonically_increasing_id())

这样就能实现添加列ID的目的

2. 筛选出DataFrame中重复值非常多的行

在DatFrame中有一个stat方法,可以统计每行的frequentItems

df.stat.freqItems(df.columns,0.95)

会统计出df中所有列中的重复值占比不低于95%的列,返回的是一个DataFrame的对象,该DataFrame上每个列名在原基础上加了_freqItems的后缀,这样很不方便,如果要去掉这些列,还需要进一步处理

3. 给每行的数据添加一个数据
在求进行频繁项集挖掘时,从数据源(CSV,DB……)中读取数据,得到一个DataFrame,然后需要将每个数据转换成feature=value的形式,如:

IPCOUNTRYAGE
117.14.59.89China20
117.19.34.25UK21
………………

转换为:

IPCOUNTRYAGE
IP=117.14.59.89COUNTRY=ChinaAGE=20
IP=117.19.34.25COUNTRY=UKAGE=21
………………

可使用如下代码:

data.columns.foldLeft(data) {
  (acc: DataFrame, colName: String) =>
    acc.withColumn(colName, concat(lit(colName + "="), col(colName)))
}

利用foldLetf和lit函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值