我们知道在spark中有一个方法rdd.collect可以将RDD转换为列表.
List<String> f= rdd.collect();
String[] array = f.toArray(new String[f.size()]);
Run Code Online (Sandbox Code Playgroud)
我试图在我的项目中完全相反.我有一个StringList,我想转换为JavaRDD.我正在寻找这个解决方案很长一段时间但没有找到答案.有人可以帮帮我吗?
我正在研究一个用例,我必须将数据从RDBMS传输到HDFS.我们使用sqoop对此案例进行了基准测试,发现我们能够在6-7分钟内传输大约20GB的数据.
当我尝试使用Spark SQL时,性能非常低(1 GB的记录从netezza转移到hdfs需要4分钟).我正在尝试进行一些调整并提高其性能,但不太可能将其调整到sqoop的水平(1分钟内大约3 Gb的数据).
我同意spark主要是一个处理引擎这一事实,但我的主要问题是spark和sqoop都在内部使用JDBC驱动程序,所以为什么性能上有太大差异(或者可能是我遗漏了一些东西).我在这里发布我的代码.
object helloWorld {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Netezza_Connection").setMaster("local")
val sc= new SparkContext(conf)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.read.format("jdbc").option("url","jdbc:netezza://hostname:port/dbname").option("dbtable","POC_TEST").option("user","user").option("password","password").option("driver","org.netezza.Driver").option("numPartitions","14").option("lowerBound","0").option("upperBound","13").option("partitionColumn", "id").option("fetchSize","100000").load().registerTempTable("POC")
val df2 =sqlContext.sql("select * from POC")
val partitioner= new org.apache.spark.HashPartitioner(14)
val rdd=df2.rdd.map(x=>(String.valueOf(x.get(1)),x)).partitionBy(partitioner).values
rdd.saveAsTextFile("hdfs://Hostname/test")
}
}
Run Code Online (Sandbox Code Playgroud)
我检查了很多其他帖子,但无法得到sqoop内部工作和调优的明确答案,也没有得到sqoop vs spark sql基准测试.有助于理解这个问题.
这是我第一次使用Apache POI,我已经在本网站上提出了我要问的问题,但没有给出明确的答案,所以我别无选择,只能接受你的帮助.
我正在尝试编写一个java程序,它从一个文件夹中获取图像并将该图像插入到word文档中.我在这个程序中使用Apache POI.我在这里发布我的代码.
import java.io.*;
import java.util.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xwpf.usermodel.*;
public class ImagesDoc
{
public static void main(String[] args) throws IOException
{
XWPFDocument docx = new XWPFDocument();
XWPFParagraph par = docx.createParagraph();
XWPFRun run = par.createRun();
run.setText("Hello, World. This is my first java generated docx-file. Have fun.");
run.setFontSize(13);
InputStream pic = new FileInputStream("C:\\Users\\amitabh\\Pictures\\pics\\pool.jpg");
byte [] picbytes = IOUtils.toByteArray(pic);
docx.addPicture(picbytes, Document.PICTURE_TYPE_JPEG);
FileOutputStream out = new FileOutputStream("C:\\Users\\amitabh\\Pictures\\pics\\simple1.docx");
docx.write(out);
out.close();
pic.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我能够创建word文档文件,我也可以插入文本,但是docx.addPicture(picbytes, Document.PICTURE_TYPE_JPEG);行给出了错误"add cast to docx".我为这个程序添加了所有可能的罐子.对于这个错误,我在网上搜索,发现很多人都有类似的问题.XWPFDocument引用的"addPicture"无法正常工作.请帮我解决这个问题.
我有一个包含键值对的JavaPairDStream.我需要将它转换为HashMap.我已经尝试通过调用"collectAsMap()"函数和它的工作方式对普通的JavaPairRDD做同样的事情但是当我试图在DStream上做同样的事情时,它失败了.
我试图通过使用"foreachRDD"函数将"JavaPairDStream"转换为"JavaPairRDD"来实现相同的目标,之后我在JavaPairRDD上使用"collectAsMap()"函数.
Map<String,String> value= new HashMap<String,String>();
value=line.collectAsMap();
//Here "line" is a "JavaPairRDD<String,String>".
Run Code Online (Sandbox Code Playgroud)
它不会给出任何编译错误但是当我运行程序时它会失败并抛出错误,如下所示.
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lscala.Tuple2;
at org.apache.spark.rdd.PairRDDFunctions.collectAsMap(PairRDDFunctions.scala:447)
at org.apache.spark.api.java.JavaPairRDD.collectAsMap(JavaPairRDD.scala:464)
at attempt1.CSV_Spark$3.call(CSV_Spark.java:109)
at attempt1.CSV_Spark$3.call(CSV_Spark.java:1)
Run Code Online (Sandbox Code Playgroud)
我不确定我的方法是否正确.普通的"JavaPairRDD"与"foreachRDD"函数创建的"JavaPairRDD"之间有什么区别吗?为什么相同的方法适用于普通的"JavaPairRDD",但是当我将它应用于通过在JavaPairDStream上应用"foreachRDD"函数创建的"JavaPairRDD"时失败.如果我在任何地方出错,请告诉我.如果还有其他方式,请在此处发布.谢谢.
我正在编写一个程序,使用spark-sql在一个公共参数上连接两个文件.我认为我的代码很好但是当我试图将其保存为文本文件时,我收到错误.我把我的代码如下: -
import java.util.regex.Pattern;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.api.java.JavaSQLContext;
import org.apache.spark.sql.api.java.JavaSchemaRDD;
import java.io.Serializable;
public class JoinCSV {
@SuppressWarnings("serial")
public static class CompleteSample implements Serializable {
private String ASSETNUM;
private String ASSETTAG;
private String CALNUM;
public String getASSETNUM() {
return ASSETNUM;
}
public void setASSETNUM(String aSSETNUM) {
ASSETNUM = aSSETNUM;
}
public String getASSETTAG() {
return ASSETTAG;
}
public void setASSETTAG(String aSSETTAG) {
ASSETTAG = aSSETTAG;
}
public String getCALNUM() {
return CALNUM;
}
public void setCALNUM(String cALNUM) …Run Code Online (Sandbox Code Playgroud) 我有一个关于YARN“ Fair Scheduler”的基本问题。根据“公平调度程序的定义 -公平调度是一种为应用程序分配资源的方法,以使所有应用程序随时间平均获得相等的资源份额”。
以下是我的理解和问题。
(1)如果在YARN上运行多个应用程序,则将确保所有应用程序在一段时间内或多或少地获得相等的资源份额。
(2)我的问题是,如果在YARN中将此属性设置为true,那么如果在提交spark-submit时使用以下配置,这有什么区别吗?
(i) driver-memory
(ii) executor-memory
(iii) num-executors
(iv) executor-cores
Run Code Online (Sandbox Code Playgroud)
如果在使用spark-submit时提及这些conf参数,将会发生什么?这些参数将被接受并且资源将根据请求进行分配,或者这些conf参数将被忽略,并且YARN将基于公平调度为spark应用分配一些默认数量的资源。
请让我知道这个问题是否需要其他说明。谢谢
我知道这是一个非常基本的问题,但请先阅读完整的问题.它有点让我困惑,所以我需要你的帮助.我们知道在java中有两种创建对象的方法.
new"关键字和class.forName().但我在一本书中也遇到了其他一些方法来创造一个我无法理解的对象.关键字是
对于这些关键字,我没有在互联网上获得任何好的研究材料.请帮帮我.我在这里发布链接.请阅读前两行. http://www.artima.com/insidejvm/ed2/gcP.html
我是Scala的新手.我有三个List.
List("XX", None,None,None)
List( None,"YY",None,None)
List(None,None,None, "ZZ")
Run Code Online (Sandbox Code Playgroud)
我需要合并这些列表来创建一个应该看起来像的列表
List("XX","YY",None,"ZZ")
Run Code Online (Sandbox Code Playgroud)
scala有什么方法可以实现这个结果吗?谢谢
apache-spark ×4
java ×3
bigdata ×2
hadoop ×2
apache-poi ×1
bytecode ×1
hadoop-yarn ×1
jvm ×1
rdd ×1
scala ×1
sqoop ×1