import java.io.{File,PrintWriter}
import java.text.SimpleDateFormat
import java.util.{Calendar, Date}
//import scala.io.Source
object FileOps {
def main(args: Array[String]): Unit = {
//文件读取
// val file = Source.fromFile("D:\\software\\data\\scalaIO.txt")
// file.foreach(print)
// file.close()getTracffic()
* 文件格式:
* domain tracffic time
* www.ruozedata.com
64447
[2018-07-17 07:39:57]
* www.ruozedata.com
13781
[2018-07-11 06:52:41]
//文件写入
//加载文件D:\software\data\ScalaWriter.txt 如果没有会创建
val writer = new PrintWriter(new File("D:\\software\\data\\ScalaWriter.txt"))
writer.flush(); //清空文件内容
//输入标题字段:domain tracffic time
//writer.println("domain\ttracffic\ttime")
//定义网址的数组
val arr = Array("www.ruozedata.com","www.zhibo8.com","www.dongqiudi.com")
//定义26个字母的数组 用于随机写入tracffic字段的值(非数字)
val arr2 = Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
//定义一个数字的集合
val arr3 = (10000 to 99999).toArray
//用于接收tracffic值的变量
var ele = ""
for(i <- 1 until 100000){
//如果 i为偶数就设置ele的值为数字,否则设置为字母
ele = if (i%10==0) arr2((new util.Random).nextInt(26)) else arr3((new util.Random).nextInt(arr3.length)).toString()
//将内容写入到文件里面
writer.println(arr((new util.Random).nextInt(3))+"\t"+ele+"\t"+(getNowDate()))
//关闭写入流
writer.close()
//获取动态时间的方法,格式:yyyy-MM-dd HH:mm:ss
def getNowDate(): String = {
// 动态获取日
var days = (new util.Random).nextInt(getNowMonthEnd()).toString() ;
// 动态获取小时
var hours = (new util.Random).nextInt(23).toString() ;
// 动态获取分钟
var minutes = (new util.Random).nextInt(59).toString() ;
// 动态获取秒
var seconds = (new util.Random).nextInt(59).toString() ;
//判断1-9的日需要在前面添加0
if (days == "0"){ // 如果获取的日为0,则需要手动处理成其他日,我这里处理成01
days = "01"
}else{
if ((days.length()) == 1) {
days = "0"+days
//判断1-9的日需要在前面添加0
hours = if (hours.length() == 1) "0"+hours else hours
//判断1-9的日需要在前面添加0
minutes = if (minutes.length() == 1) "0"+minutes else minutes
//判断1-9的日需要在前面添加0
seconds = if (seconds.length() == 1) "0"+seconds else seconds
//获取当前日期
val now: Date = new Date()
val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM")
//格式化当前日期 格式:yyyy-MM
val date = dateFormat.format(now)
//返回动态日期格式:[yyyy-MM-dd HH:mm:ss]
return "["+date+"-"+days+" "+hours+":"+minutes+":"+seconds+"]"
//获取当前月的最后一天的方法
def getNowMonthEnd():Int={
var period:String=""
var cal:Calendar =Calendar.getInstance();
var df:SimpleDateFormat = new SimpleDateFormat("dd");
cal.set(Calendar.DATE, 1)
cal.roll(Calendar.DATE,-1)
period=df.format(cal.getTime())//本月最后一天
Integer.parseInt(period)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29609890/viewspace-2168576/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29609890/viewspace-2168576/
今天在Windows上跑
Scala
词频统计的时候,发现RDD
文件
并不能直接
保存
到本地的
txt
文件
中,如果使用saveAsTextFile方法的话,会将RDD
数据
以
文件
夹且
数据
不能直接使用
但是使用其他的方法又比较麻烦,对新手很不友好,这里教大家一个小方法
将RDD
数据
使用toArray()转为数组即可遍历
写入
本地
文件
了,如果有更好的方法,私信笔者,毕竟该方法
Scala
官方已经不推荐使用了。
代码如下:
package day01
import
java
.io.PrintWriter
import
java
文章目录读取
文件
数据
按行读取按字符读取
写入
数据
读取
文件
数据
在
Scala
语言的 Source单例对象中 中, 提供了一些非常便捷的方法, 从而使开发者可以快速的从
指定
数据
源(文本文
件, URL地址等)中获取
数据
, 在使用 Source单例对象 之前, 需要先导包, 即 import
scala
.io.Source .
我们可以以 行 为单位, 来读取
数据
源中的
数据
, 返回值是一个 迭代器类型的对象 . 然后通过 toArray, toList 方 法, 将这些
数据
放到数组或者列表中即可.
一、使用DataFrame.saveAsHadoopDataset(conn)方法。
特点:适合做批量的
写入
。优点为批量
写入
方便快捷。缺点对于
数据
量大的DF
写入
速度太慢。
val conn = new JobConf(HBaseConfigurationcreate())//设置HBase连接
conn.set(,)
conn.set(,)//设置Host和Port
conn.set(TableO...
scala
> a.select(a.col("id"),a.col("username"),a.col("birthday").cast("string").as("bir")).show
2 遍历DF的所有列依次修改,适用于修改成统一的类型
val writer = new PrintWriter(new File("data/test.
txt
" ))
userdata //spark rdd
.map(s=>s.toString)
.collect
.foreach{s=>
writer.write(s+"\n")
writer.close()
object jsonTest {
case class Person(id:Int,name:String,age:Int)
def main(args: Array[String]): Unit = {
scala
中的list是一个不可变的列表,有时候我们想直接添加对象不太方便,这个时候可以先转成
java
的List添加完再转回去.
LIst支持在头部快速添加和移除条目,但是不提供快速按下标访问的功能,这个功能需要线性遍历列。
快速的头部添加和移除意味着模式匹配很顺畅
List列表跟数组非常像,2者都是同构的,同一个列表的所有元素必须是相同类型。
如果我们
想要
往一个list里面存一个obje...
def main(args: Array[String]): Unit = {
//1.从
文件
中读取
数据
Source.fromFile("src/main/resources/test.
txt
").foreach(print)
//2。将
数据
写入
文件
java
中的
val writer = new Print