我有一个Dataframe,我试图压扁.作为整个过程的一部分,我想爆炸它,所以如果我有一列数组,那么数组的每个值都将用于创建一个单独的行.例如,
id | name | likes
_______________________________
1 | Luke | [baseball, soccer]
Run Code Online (Sandbox Code Playgroud)
应该成为
id | name | likes
_______________________________
1 | Luke | baseball
1 | Luke | soccer
Run Code Online (Sandbox Code Playgroud)
这是我的代码
private DataFrame explodeDataFrame(DataFrame df) {
DataFrame resultDf = df;
for (StructField field : df.schema().fields()) {
if (field.dataType() instanceof ArrayType) {
resultDf = resultDf.withColumn(field.name(), org.apache.spark.sql.functions.explode(resultDf.col(field.name())));
resultDf.show();
}
}
return resultDf;
}
Run Code Online (Sandbox Code Playgroud)
问题是在我的数据中,一些数组列有空值.在这种情况下,整个行都将被删除.所以这个数据帧:
id | name | likes
_______________________________
1 | Luke | [baseball, soccer]
2 | Lucy | null
Run Code Online (Sandbox Code Playgroud)
变 …
在Java中是否有办法将函数应用于a的所有元素Stream而不破坏Stream链?我知道我可以打电话forEach,但那个方法会返回一个void,而不是一个Stream.
根据发布历史,弹性搜索从2.4切换到5.0.
https://en.wikipedia.org/wiki/Elasticsearch#History我无法在网上找到关于版本2和版本5之间发生的事情的文档,这使得很难确定升级是否明智.
我正在编写一个 AWS 步骤函数,对于其中一个步骤,我希望调用一个接受数组作为输入之一的 lambda。但是,如果我尝试将 JsonPath 传入数组,则会得到
The value for the field 'arrayField.$' must be a STRING that contains a JSONPath but was an ARRAY
Run Code Online (Sandbox Code Playgroud)
我的步骤函数定义:
{
"StartAt": "First",
"States": {
"First": {
"Type": "Pass",
"Parameters": {
"type": "person"
},
"ResultPath": "$.output",
"Next": "Second"
},
"Second": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<aws_id>:function:MyFunction",
"Parameters": {
"regularParameter": "some string",
"arrayParameter.$": ["$.output.type"]
},
"Next": "Succeed"
},
"Succeed": {
"Type": "Succeed"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何在数组中使用 jsonPath?
我想知道调用 except 之间是否存在性能差异(https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/sql/Dataset.html# except(org.apache. Spark.sql.Dataset)并使用左反连接。到目前为止,我看到的唯一区别是,使用左反连接,两个数据集可以具有不同的列。
假设我有以下代码:
System.out.println(Math.PI);
Run Code Online (Sandbox Code Playgroud)
是否有插件或某些设置,我可以将鼠标悬停在上面Math.PI并让IntelliJ告诉我常量的值?
我有 2 个 AWS 账户:Account1 和 Account2。我在 Account1 的 S3 中存储了一些数据,并将这些数据注册到 Account1 的 Athena 表中。现在,我想从 Account2 访问同一个 Athena 表。我意识到我可以在 Account2 中创建一个 Athena 表来查询 Account1 中的数据,但理想情况下我希望将所有表保留在 Account1 下。
在 Spark 中读入 ORC 文件时,如果在路径中指定分区列,则该列将不会包含在数据集中。例如,如果我们有
val dfWithColumn = spark.read.orc("/some/path")
val dfWithoutColumn = spark.read.orc("/some/path/region_partition=1")
Run Code Online (Sandbox Code Playgroud)
那么 dfWithColumn 将有一个 region_partition 列,但 dfWithoutColumn 不会。我如何指定我要包含所有列,即使它们已分区?
我在 Scala 上使用 spark 2.2。
编辑:这是一个可重用的 Spark 程序,它将从命令行接收参数;即使用户传入表的特定分区而不是整个表,我也希望程序能够工作。因此,使用 Dataset.filter 不是一种选择。
仅当新项目的日期比现有项目更新时,我才想更新DynamoDB中的项目.目前,我正在查询现有项目,在我的代码中进行比较,然后写入db.我想知道是否有办法让DynamoDB为我做检查.我已经研究过使用Expected,但是它的比较运算符需要接受一个参数,这会破坏目的,因为它意味着无论如何都要查询现有项目.
我正在使用Java 8.
我想向我的Spark数据帧添加一个具有随机生成的ID的列。为此,我使用UDF调用UUID的随机UUID方法,如下所示:
def getRandomId(s:String) : String = {
UUID.randomUUID().toString()
}
val idUdf = udf(getRandomId(_:String))
val newDf = myDf.withColumn("id", idUdf($"colName"))
Run Code Online (Sandbox Code Playgroud)
显然,我的getRandomId函数不需要输入参数。但是,我不知道如何创建不接受列作为输入的UDF。在Spark中有可能吗?
我正在使用Spark 1.5
apache-spark ×4
java ×4
amazon-iam ×1
anti-join ×1
chaining ×1
java-8 ×1
java-stream ×1
null ×1
orc ×1
scala ×1
udf ×1