在 Scala 中,如何读取文件HDFS
并将内容分配给变量。我知道如何读取文件并且可以打印它。但是如果我尝试将内容分配给一个字符串,它将输出为 Unit()。下面是我试过的代码。
val dfs = org.apache.hadoop.fs.FileSystem.get(config);
val snapshot_file = "/path/to/file/test.txt"
val stream = dfs.open(new Path(snapshot_file))
def readLines = Stream.cons(stream.readLine, Stream.continually( stream.readLine))
readLines.takeWhile(_ != null).foreach(line => println(line))
Run Code Online (Sandbox Code Playgroud)
上面的代码正确打印输出。但是如果我尝试将输出分配给一个字符串,我会得到正确的输出。
val snapshot_id = readLines.takeWhile(_ != null).foreach(line => println(line))
snapshot_id: Unit = ()
Run Code Online (Sandbox Code Playgroud)
将内容分配给变量的正确方法是什么?
我正在用Java编写Spark应用程序,该应用程序读取HiveTable并将输出以Json格式存储在HDFS中。
我使用读取了配置单元表HiveContext
,它返回了DataFrame。下面是代码片段。
SparkConf conf = new SparkConf().setAppName("App");
JavaSparkContext sc = new JavaSparkContext(conf);
HiveContext hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);
DataFrame data1= hiveContext.sql("select * from tableName")
Run Code Online (Sandbox Code Playgroud)
现在我想转换DataFrame
为JsonArray
。例如,data1数据如下所示
| A | B |
-------------------
| 1 | test |
| 2 | mytest |
Run Code Online (Sandbox Code Playgroud)
我需要如下输出
[{1:"test"},{2:"mytest"}]
Run Code Online (Sandbox Code Playgroud)
我尝试使用data1.schema.json()
,它给了我下面的输出,而不是数组。
{1:"test"}
{2:"mytest"}
Run Code Online (Sandbox Code Playgroud)
什么是正确的做法或功能转换DataFrame
到jsonArray
不使用任何第三方库。
我有一个 Any 类型的 WrappedArray 值。我如何转换为数组。
例如:
val flds = valArr(0)(2)
flds: Any = WrappedArray(F1,F2,F3,F4,F5)
Run Code Online (Sandbox Code Playgroud)
我尝试将 flds 转换为 String Array ..
val flds = valArr(0)(2).toArray
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
<console>:41: error: value toArray is not a member of Any
Run Code Online (Sandbox Code Playgroud)
我如何转换..?我只是想遍历wrappedArray,但我不知道该怎么做..这就是为什么我试图将其转换为数组并遍历它。
我正在尝试使用Spark中的HiveContext访问hive中映射的hbase表.但是我得到了ClassNotFoundException
例外.下面是我的代码.
import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
val df = sqlContext.sql("select * from dbn.hvehbasetable")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误..
17/06/22 07:17:30错误日志:initSerDe中的错误:java.lang.ClassNotFoundException未找到类org.apache.hadoop.hive.hbase.HBaseSerDe java.lang.ClassNotFoundException:类org.apache.hadoop.hive在org.apache的org.apache.hadoop.conf.Contaiguration.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:385)的org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2120)找不到.hbase.HBaseSerDe位于org.apache.hadoop.hive的org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:258)的.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276) .g.apache.spark.cl.位于org.apache.spark的scala.Option.map(Option.scala:145)的.apache.spark.sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1 $$ anonfun $ 3.apply(ClientWrapper.scala:337) .sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1.适用(ClientWrapp er.scala:337)org.apache.spark.sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1.apply(ClientWrapper.scala:332)at org.apache.spark.sql.hive.client.ClientWrapper $ $ anonfun $ withHiveState $ 1.apply(ClientWrapper.scala:290)at org.apache.spark.sql.hive.client.ClientWrapper.liftedTree1 $ 1(ClientWrapper.scala:237)
任何人都可以帮助我导入哪些类来读取hbase表.
我LinkedHashMultimap
在我的项目中使用.我需要在保留插入顺序的同时展平值.例如用
SetMultimap<String, Integer> m = LinkedHashMultimap.create();
m.put("a", 1);
m.put("b",2);
m.put("a",3);
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
a : [1,3]
b : 2
Run Code Online (Sandbox Code Playgroud)
但是我需要
a : 1
b : 2
a : 3
Run Code Online (Sandbox Code Playgroud)
或者我需要输出在List中
[a,1,b,2,a,3]
Run Code Online (Sandbox Code Playgroud)
PS我正在使用,LinkedHashMultimap
因为我不想复制values
a key
,我需要保留插入顺序
我怎么能这样做,所以我可以迭代上面的输出进行进一步处理?
我的下面的代码导致无限循环.我加入3 maps
到ArrayList
并试图迭代list
的Maps
.但我不知道造成无限循环的原因.我知道我可能会犯一些愚蠢的错误,但我无法理解.有人可以帮忙吗?
package paddy.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Maptest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map < String, Integer > m = new HashMap<String, Integer>();
m.put("a", 1);
m.put("b", 1);
m.put("c", 1);
m.put("d", 1);
m.put("e", 1);
Map < String, Integer > m1 = new HashMap<String, Integer>();
m1.put("a", 1);
m1.put("b", 1);
m1.put("c", 1);
m1.put("d", 1);
m1.put("e", 1);
Map < String, Integer …
Run Code Online (Sandbox Code Playgroud) apache-spark ×3
java ×3
scala ×3
arrays ×2
guava ×1
hadoop ×1
hbase ×1
hdfs ×1
hivecontext ×1
json ×1
multimap ×1
spark-submit ×1