spark1.6使用:读取本地外部数据,把RDD转化成DataFrame,保存为parquet格式,读取csv格式

本文详细介绍如何使用Spark进行数据处理,包括启动Spark环境、将RDD转换为DataFrame、利用SQL查询DataFrame及读写外部数据源如JSON和Parquet文件的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、先开启Hadoop和spark

二、启动spark-shell

spark-shell --master local[2] --jars /usr/local/src/spark-1.6.1-bin-hadoop2.6/libext/com.mysql.jdbc.Driver.jar

1.读取spark目录下面的logs日志作为测试:

val alllog=sc.textFile("file:///usr/local/src/spark-1.6.1-bin-hadoop2.6/logs/*out*")

alllog.count 看看一共有347记录

2.转为为DataFrame

现在读取进来的是RDD格式,用map函数把每条记录转成一行

import org.apache.spark.sql.Row

val alllogRDD=alllog.map(x =>Row(x))

import org.apache.spark.sql.types._

val schemaString="line"

val schema=StructType(schemaString.split(" ").map(fieldName =>StructField(fieldName,StringType,true)))

val alllogDataFrame = sqlContext.createDataFrame(alllogRDD, schema)

alllogDataFrame.printSchema  #打印schema
alllogDataFrame.show(false) #这里的false表示不省略,否则跟下午一样,会三点省略

到此为止,已经把RDD转化为DataFrame了。

三、把DataFrame转为为表用SQL查询

alllogDataFrame.registerTempTable("log")

sqlContext.sql("SELECT * FROM log").show()

到此就可以使用SQL了。

四、读取和存储外部数据源

1.读取json文件

 val df = sqlContext.read.format("json").load("file:///mnt/hgfs/vm/china.json")

df.printSchema

 df.select("*").write.format("parquet").mode("overwrite").save("file:///mnt/hgfs/vm/china.parquet") #保存为parquet格式

这里的mode可以有overwrite,append,ignore等模式,也可以不用。

这样就直接生产DataFrame数据,不用添加schema信息了。

对于parquet文件,还有更高级的使用方法,直接读取文件就行了

 val df = sqlContext.sql("SELECT * FROM parquet.`examples/src/main/resources/users.parquet`")

对于json里面有嵌套数组,想要展开成多行,可以在SQL中使用explode函

 

### 使用 Apache Spark 从文件系统读取数据 为了使用 Apache Spark 从文件系统中读取数据,可以利用 `SparkContext` 或者 DataFrame API 提供的功能来加载不同类型的文件。以下是具体方法: 对于结构化数据处理,推荐使用 DataFrame API 来简化操作并提高性能。可以通过调用 `spark.read.format().load()` 方法指定要读取的数据源格式以及路径。 #### 文本文件 (Text Files) 当目标是从本地或者分布式文件系统(如 HDFS)中读取纯文本文件时,可采用如下方式创建 RDDDataFrame: ```python # 创建 SparkSession实例 from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadFileExample").getOrCreate() # 通过 text 文件构建RDD text_file_rdd = spark.sparkContext.textFile("file:///path/to/text/file.txt") # 如果想换成DataFrame,则需先定义模式(schema),再应用到rdd上 from pyspark.sql.types import StringType, StructType, StructField schema = StructType([StructField("line", StringType(), True)]) df_text = text_file_rdd.map(lambda line: (line,)).toDF(schema) ``` #### CSV 和 JSON 文件 CSV 和 JSON 是常见的半结构化数据存储形式,在 Spark 中可以直接作为输入源被解析为 DataFrames. ```python # 加载csv文件至dataframe df_csv = spark.read.option("header","true").option("inferSchema","true").csv("hdfs://namenode/path/to/csv/*.csv") # 对于json文件同样适用 df_json = spark.read.json("/path/to/json/") ``` 上述代码片段展示了如何基于不同的文件类型设置相应的选项参数[^1]。 #### Parquet 文件 Parquet 是一种列式存储格式,非常适合大规模数据分析场景下的高效查询。Spark 支持直接读写 parquet 文件而无需额外配置。 ```python # 读取parquet文件进入内存成为dataframe对象 df_parquet = spark.read.parquet('/path/to/parquet/') ``` 这些例子说明了多种情况下怎样运用 PySpark 的内置函数完成对不同类型文件系统的访问和数据提取工作。值得注意的是,实际部署环境中可能还需要考虑诸如认证机制、权限管理等因素以确保安全合规地获取所需资源[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值