Apache Spark技术实战(三)利用Spark将json文件导入Cassandra &SparkR的安装及使用

简介: 本文第一部分讲解利用Spark将json文件导入Cassandra;第二部分讲解SparkR的安装及使用。

<一>利用Spark将json文件导入Cassandra

概要

sbt cassandra spark-cassandra-connector

实验目的

将存在于json文件中的数据导入到cassandra数据库,目前由cassandra提供的官方工具是json2sstable,由于对cassandra本身了解不多,这个我还没有尝试成功。

但想到spark sql中可以读取json文件,而spark-cassadra-connector又提供了将RDD存入到数据库的功能,我想是否可以将两者结合一下。

创建KeySpace和Table

为了减少复杂性,继续使用实战3中的keyspace和table,

CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
CREATE TABLE test.kv(key text PRIMARY KEY, value int);

启动spark-shell

与实战3中描述一致。

bin/spark-shell --driver-class-path /root/working/spark-cassandra-connector/spark-cassandra-connector/target/scala-2.10/spark-cassandra-connector_2.10-1.1.0-SNAPSHOT.jar:/root/.ivy2/cache/org.apache.cassandra/cassandra-thrift/jars/cassandra-thrift-2.0.9.jar:/root/.ivy2/cache/org.apache.thrift/libthrift/jars/libthrift-0.9.1.jar:/root/.ivy2/cache/org.apache.cassandra/cassandra-clientutil/jars/cassandra-clientutil-2.0.9.jar:/root/.ivy2/cache/com.datastax.cassandra/cassandra-driver-core/jars/cassandra-driver-core-2.0.4.jar:/root/.ivy2/cache/io.netty/netty/bundles/netty-3.9.0.Final.jar:/root/.ivy2/cache/com.codahale.metrics/metrics-core/bundles/metrics-core-3.0.2.jar:/root/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.7.jar:/root/.ivy2/cache/org.apache.commons/commons-lang3/jars/commons-lang3-3.3.2.jar:/root/.ivy2/cache/org.joda/joda-convert/jars/joda-convert-1.2.jar:/root/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.3.jar:/root/.ivy2/cache/org.apache.cassandra/cassandra-all/jars/cassandra-all-2.0.9.jar:/root/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.2.jar

准备json文件

以spark自带的person.json文件为例,内容如下所示

{"name":"Andy", "age":30}
{"name":"Justin", "age":19}

数据导入

假设person.json文件存储在$SPARK_HOME目录,在启动spark-shell之后,执行如下语句

sc.stop
import com.datastax.spark.connector._
import org.apache.spark._
val conf = new SparkConf()
conf.set("spark.cassandra.connection.host", "127.0.0.1")
val sc = new SparkContext("local[2]", "Cassandra Connector Test", conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val path = "./people.json"
val people = sqlContext.jsonFile(path)
people.map(p=>(p.getString(10),p.getInt(0)))
      .saveToCassandra("test","kv",SomeColumns("key","value"))

注意:

  1. jsonFile返回的是jsonRDD,其中每一个成员是Row类型,并不行直接将saveToCassandra作用于jsonRDD,需要先作一步转换即map过程
  2. map中使用到的getXXX函数是在事先已知数据类型的情况下取出其值
  3. 最后saveToCassandra触发数据的存储过程

另外一个地方值得记录一下,如果在cassandra中创建的表使用了uuid作为primary key,在scala中使用如下函数来生成uuid

import java.util.UUID
UUID.randomUUID

验证步骤

使用cqlsh来查看数据是否已经真正的写入到test.kv表中。

小结

本次实验结合了以下知识:

本文简要介绍如何使用spark-cassandra-connector将json文件导入到cassandra数据库,这是一个使用spark的综合性示例。

前提条件

假设已经阅读技术实战之3,并安装了如下软件

  1. jdk
  2. scala
  3. spark sql
  4. spark RDD的转换函数
  5. spark-cassandra-connector

<二>SparkR的安装及使用

概要

根据论坛上的信息,在Sparkrelease计划中,在Spark 1.3中有将SparkR纳入到发行版的可能。本文就提前展示一下如何安装及使用SparkR.

SparkR的出现解决了R语言中无法级联扩展的难题,同时也极大的丰富了Spark在机器学习方面能够使用的Lib库。SparkR和Spark MLLIB将共同构建出Spark在机器学习方面的优势地位。

使用SparkR能让用户同时使用Spark RDD提供的丰富Api,也可以调用R语言中丰富的Lib库。

安装SparkR

先决条件:

  1. 已经安装好openjdk 7
  2. 安装好了R

安装步骤:

步骤1: 运行R Shell

bash# R

步骤2:在R shell中安装rJava

install.packages("rJava")

步骤3: 在R shell中安装devtools

install.packages("devtools")

步骤4: 安装好rJava及devtools,接下来安装SparkR

library(devtools)
install_github("amplab-extras/SparkR-pkg", subdir="pkg")

使用SparkR来运行wordcount

安装完SparkR之后,可以用wordcount来检验安装正确与否。

步骤1:在R shell中加载SparkR

library(SparkR)

步骤2:初始化SparkContext及执行wordcount

sc <- sparkR.init(master="local", "RwordCount")
lines <- textFile(sc, "README.md")
words <- flatMap(lines,
  function(line) {
    strsplit(line, " ")[[1]]
  })
wordCount <- lapply(words, function(word) { list(word, 1L) })

counts <- reduceByKey(wordCount, "+", 2L)
output <- collect(counts)
for (wordcount in output) {
  cat(wordcount[[1]], ": ", wordcount[[2]], "\n")
}

如果想将SparkR运行于集群环境中,只需要将master=local,换成spark集群的监听地址即可

小结

时间匆忙,还有两件事情没有来得及细细分析。

  1. SparkR的代码实现
  2. 如果很好的将R中支持的数据挖掘算法与Spark并行化处理能力很好的结合

参考资料

  1. https://github.com/amplab-extras/SparkR-pkg
目录
相关文章
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
JSON JavaScript 前端开发
怎么安装JSON服务器?JSON服务器最新安装教程
JSON Server是一款轻量级工具,基于Node.js运行,可通过单个JSON文件快速模拟RESTful API,适用于开发与测试场景。其支持CRUD操作、自定义路由及高级功能如排序、搜索、分页等,同时允许通过中间件扩展功能。为确保安全性,建议在受控环境中使用,并避免处理敏感数据。此外,还有Mirage JS、Mockoon、WireMock和Postman等替代方案,可根据项目需求选择合适的工具。
697 0
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
627 1
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
535 0
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
957 0
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
1713 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
831 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
1404 9
Apache Flink:从实时数据分析到实时AI
|
SQL 人工智能 API
Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
Apache Flink 2.1.0 正式发布,标志着实时数据处理引擎向统一 Data + AI 平台迈进。新版本强化了实时 AI 能力,支持通过 Flink SQL 和 Table API 创建及调用 AI 模型,新增 Model DDL、ML_PREDICT 表值函数等功能,实现端到端的实时 AI 工作流。同时增强了 Flink SQL 的流处理能力,引入 Process Table Functions(PTFs)、Variant 数据类型,优化流式 Join 及状态管理,显著提升作业稳定性与资源利用率。
1073 0

推荐镜像

更多