刚开始猪; 尝试从文件加载数据并从此转储它.加载似乎是正确的,不会抛出任何错误.以下是查询:
NYSE = LOAD'/root/Desktop/Works/NYSE-2000-2001.tsv'使用PigStorage()AS(交换:chararray,stock_symbol:chararray,日期:chararray,stock_price_open:float,stock_price_high:float,stock_price_low:float,stock_price_close :float,stock_volume:int,stock_price_adj_close:float);
当我尝试执行转储时,它会抛出以下错误:
错误1066:无法为别名打开迭代器NYSE org.apache.pig.impl.logicalLayer.FrontendException:错误1066:无法在org.apache.pig.PigServer.openIterator(PigServer.java:857)处打开别名NYSE的迭代器org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:682)位于org.apache.pig的org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303). tools.grunt.GruntParser.parseStopOnError(GruntParser.java:189)位于org.apache.pig.tools.grunt.Grunt.run的org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:165) Grunt.java:69)org.apache.pig.Main.run(Main.java:490)atg.apache.pig.Main.main(Main.java:111)引起:java.io.IOException:Job在org.apache.pig.PigServer.openIterator(PigServer.java:849)中以异常状态FAILED终止
知道是什么导致了这个问题吗?
这可能是一个愚蠢的问题.我想确保我理解正确.
当你在一个巨大的文件(400GB)中进入一个集群,集合执行器内存只有大约120GB时,Spark似乎永远在读.它不会崩溃,也不会启动第一个地图作业.
我认为发生的事情是,Spark通过大文件作为流读取,并在执行程序内存不足时开始丢弃旧行.当.map代码的执行开始时,这显然可能是一个问题,因为执行程序jvm将再次从头开始读回文件.我想知道,Spark是否以某种方式将数据泄漏到硬盘驱动器上,类似于随机溢出机制.
请注意,我不是指缓存过程.这与使用sc.textFile(filename)的初始读取有关
我有一个问题,可以分为两种方式:我的要求是将参数从shell脚本传递给hive脚本.或者在一个shell脚本中我应该在hive语句中包含变量的值.
我将用两个例子来解释:
1)将参数从shell脚本传递给hiveQL->
My test Hive QL:
select count(*) from demodb.demo_table limit ${hiveconf:num}
Run Code Online (Sandbox Code Playgroud)
我的测试shell脚本:
cnt=1
sh -c 'hive -hiveconf num=$cnt -f countTable.hql'
Run Code Online (Sandbox Code Playgroud)
所以基本上我想在HQL中包含'cnt'的值,在这种情况下不会发生这种情况.我得到的错误是:
FAILED: ParseException line 2:0 mismatched input '<EOF>' expecting Number near 'limit' in limit clause
Run Code Online (Sandbox Code Playgroud)
我确定错误意味着变量的值没有被传递.
2)直接在shell脚本中传递参数 - >
cnt=1
hive -e 'select count(*) from demodb.demo_table limit $cnt'
Run Code Online (Sandbox Code Playgroud)
在上述两种情况下,我都无法传递参数值.有任何想法吗??
PS:我知道查询似乎很荒谬,包括计数中的'限制',但我已经改写了我实际拥有的问题.通过论证的要求仍然完整无缺.
任何想法,任何人?
提前致谢.
我有一个 DF,我将其显式转换为 RDD 并尝试获取每列的记录。无法在地图中获取它们中的每一个。以下是我尝试过的:
val df = sql("Select col1, col2, col3, col4, col5 from tableName").rdd
Run Code Online (Sandbox Code Playgroud)
结果 df 成为以下成员org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]
现在我尝试通过以下方式访问此 RDD 的每个元素:
val dfrdd = df.map{x => x.get(0); x.getAs[String](1); x.get(3)}
Run Code Online (Sandbox Code Playgroud)
问题是,上述语句仅返回 map 最后一次转换中存在的数据,即 上存在的数据x.get(3)
。有人可以让我知道我做错了什么吗?
我nifi.properties
在系统的文件中定义了一个变量,我试图ExecuteScript
使用Groovy
. 以下是我尝试过的:
def flowFile = session.get()
if (!flowFile) return
try
{
def newFile = new File(${config.password.file}).getText()
flowFile = session.putAttribute(flowFile, "passwordFile", newFile.toString())
session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e)
{
flowFile = session.putAttribute(flowFile, "errorStack",e.toString())
session.transfer(flowFile, REL_FAILURE)
}
Run Code Online (Sandbox Code Playgroud)
的值config.password.file
是包含我需要使用的密码的文件的绝对路径。
不确定,但这种方法行不通。这是我得到的错误堆栈:
groovy.lang.MissingPropertyException: No such property: config for class: Script90
我尝试使用常规功能,通过下面的代码从本地计算机上的文件中读取密码,效果很好。
def filex = "C:\\Users\\myUser\\Desktop\\passwordFile.pass"
String passFile = new File(filex).getText()
Run Code Online (Sandbox Code Playgroud)
知道我错过了什么/做错了什么吗?
另外,根据我上面提到的错误堆栈,它没有具体提到缺少什么属性。有谁知道如何自定义代码,因为它会生成错误,确切地说缺少哪个属性或类似的东西?
apache-spark ×2
apache-nifi ×1
apache-pig ×1
bash ×1
groovy ×1
hadoop ×1
hive ×1
rdd ×1
scala ×1