{"push_id":1386699396,"size":77,"distinct_size":9,"ref":"refs/heads/truncate","head":"8941e105596219cfbbcb46edb8f852f6f23425ff","before":"9045ccd7c1d68f5690efdbbf2bcc21a0bc6646be","commits":[{"sha":"90d3b91f4cb59d84fea7105d54ef8c87a7d5c6a2","author":{"name":"Eric Liang","email":"8825d93f7d4ea34a2c506e18a7ac7514d6509e7d@databricks.com"},"message":"[SPARK-18103][SQL] Rename *FileCatalog to *FileIndex\n\n## What changes were proposed in this pull request?\n\nTo reduce the number of components in SQL named *Catalog, rename *FileCatalog to *FileIndex. A FileIndex is responsible for returning the list of partitions / files to scan given a filtering expression.\n\n```\nTableFileCatalog => CatalogFileIndex\nFileCatalog => FileIndex\nListingFileCatalog => InMemoryFileIndex\nMetadataLogFileCatalog => MetadataLogFileIndex\nPrunedTableFileCatalog => PrunedInMemoryFileIndex\n```\n\ncc yhuai marmbrus\n\n## How was this patch tested?\n\nN/A\n\nAuthor: Eric Liang <ekl@databricks.com>\nAuthor: Eric Liang <ekhliang@gmail.com>\n\nCloses #15634 from ericl/rename-file-provider.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/90d3b91f4cb59d84fea7105d54ef8c87a7d5c6a2"},{"sha":"8ae2da0b2551011e2f6cf02907a1e20c138a4b2f","author":{"name":"Dongjoon Hyun","email":"1bf3a3c57610939bd1558dffb564906c959abecb@apache.org"},"message":"[SPARK-18106][SQL] ANALYZE TABLE should raise a ParseException for invalid option\n\n## What changes were proposed in this pull request?\n\nCurrently, `ANALYZE TABLE` command accepts `identifier` for option `NOSCAN`. This PR raises a ParseException for unknown option.\n\n**Before**\n```scala\nscala> sql(\"create table test(a int)\")\nres0: org.apache.spark.sql.DataFrame = []\n\nscala> sql(\"analyze table test compute statistics blah\")\nres1: org.apache.spark.sql.DataFrame = []\n```\n\n**After**\n```scala\nscala> sql(\"create table test(a int)\")\nres0: org.apache.spark.sql.DataFrame = []\n\nscala> sql(\"analyze table test compute statistics blah\")\norg.apache.spark.sql.catalyst.parser.ParseException:\nExpected `NOSCAN` instead of `blah`(line 1, pos 0)\n```\n\n## How was this patch tested?\n\nPass the Jenkins test with a new test case.\n\nAuthor: Dongjoon Hyun <dongjoon@apache.org>\n\nCloses #15640 from dongjoon-hyun/SPARK-18106.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/8ae2da0b2551011e2f6cf02907a1e20c138a4b2f"},{"sha":"2881a2d1d1a650a91df2c6a01275eba14a43b42a","author":{"name":"Hossein","email":"d6113056401dfad7afd27763bfa2c3f84d4619bc@databricks.com"},"message":"[SPARK-17919] Make timeout to RBackend configurable in SparkR\n\n## What changes were proposed in this pull request?\n\nThis patch makes RBackend connection timeout configurable by user.\n\n## How was this patch tested?\nN/A\n\nAuthor: Hossein <hossein@databricks.com>\n\nCloses #15471 from falaki/SPARK-17919.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/2881a2d1d1a650a91df2c6a01275eba14a43b42a"},{"sha":"b6879b8b3518c71c23262554fcb0fdad60287011","author":{"name":"Felix Cheung","email":"00eb71019ad7acfd67cff51fce666aad32ce6eed@hotmail.com"},"message":"[SPARK-16137][SPARKR] randomForest for R\n\n## What changes were proposed in this pull request?\n\nRandom Forest Regression and Classification for R\nClean-up/reordering generics.R\n\n## How was this patch tested?\n\nmanual tests, unit tests\n\nAuthor: Felix Cheung <felixcheung_m@hotmail.com>\n\nCloses #15607 from felixcheung/rrandomforest.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/b6879b8b3518c71c23262554fcb0fdad60287011"},{"sha":"7c3786929205b962b430cf7fc292602c2993c193","author":{"name":"Felix Cheung","email":"00eb71019ad7acfd67cff51fce666aad32ce6eed@hotmail.com"},"message":"[SPARK-18110][PYTHON][ML] add missing parameter in Python for RandomForest regression and classification\n\n## What changes were proposed in this pull request?\n\nAdd subsmaplingRate to randomForestClassifier\nAdd varianceCol to randomForestRegressor\nIn Python\n\n## How was this patch tested?\n\nmanual tests\n\nAuthor: Felix Cheung <felixcheung_m@hotmail.com>\n\nCloses #15638 from felixcheung/pyrandomforest.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/7c3786929205b962b430cf7fc292602c2993c193"},{"sha":"d2923f173265b66a4ec71c3c86ff71a58d5aeb3d","author":{"name":"Shixiong Zhu","email":"eb2f6da57ec54996cebae8c2a82b9fbfd527e14c@databricks.com"},"message":"[SPARK-18143][SQL] Ignore Structured Streaming event logs to avoid breaking history server\n\n## What changes were proposed in this pull request?\n\nBecause of the refactoring work in Structured Streaming, the event logs generated by Strucutred Streaming in Spark 2.0.0 and 2.0.1 cannot be parsed.\n\nThis PR just ignores these logs in ReplayListenerBus because no places use them.\n## How was this patch tested?\n- Generated events logs using Spark 2.0.0 and 2.0.1, and saved them as `structured-streaming-query-event-logs-2.0.0.txt` and `structured-streaming-query-event-logs-2.0.1.txt`\n- The new added test makes sure ReplayListenerBus will skip these bad jsons.\n\nAuthor: Shixiong Zhu <shixiong@databricks.com>\n\nCloses #15663 from zsxwing/fix-event-log.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/d2923f173265b66a4ec71c3c86ff71a58d5aeb3d"},{"sha":"26b07f1908eeffd934b1e86fb4de02f69945e004","author":{"name":"Sean Owen","email":"4c59f357315334980589bde1049040bf6de6532c@cloudera.com"},"message":"[BUILD] Close stale Pull Requests.\n\nCloses #11610\nCloses #15411\nCloses #15501\nCloses #12613\nCloses #12518\nCloses #12026\nCloses #15524\nCloses #12693\nCloses #12358\nCloses #15588\nCloses #15635\nCloses #15678\nCloses #14699\nCloses #9008\n\nAuthor: Sean Owen <sowen@cloudera.com>\n\nCloses #15685 from srowen/CloseStalePRs.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/26b07f1908eeffd934b1e86fb4de02f69945e004"},{"sha":"8bfc3b7aac577e36aadc4fe6dee0665d0b2ae919","author":{"name":"Cheng Lian","email":"924ffd5d9c6cd2cddca5f635d9a74ad9e1c46f4d@databricks.com"},"message":"[SPARK-17972][SQL] Add Dataset.checkpoint() to truncate large query plans\n\n## What changes were proposed in this pull request?\n### Problem\n\nIterative ML code may easily create query plans that grow exponentially. We found that query planning time also increases exponentially even when all the sub-plan trees are cached.\n\nThe following snippet illustrates the problem:\n\n``` scala\n(0 until 6).foldLeft(Seq(1, 2, 3).toDS) { (plan, iteration) =>\n  println(s\"== Iteration $iteration ==\")\n  val time0 = System.currentTimeMillis()\n  val joined = plan.join(plan, \"value\").join(plan, \"value\").join(plan, \"value\").join(plan, \"value\")\n  joined.cache()\n  println(s\"Query planning takes ${System.currentTimeMillis() - time0} ms\")\n  joined.as[Int]\n}\n\n// == Iteration 0 ==\n// Query planning takes 9 ms\n// == Iteration 1 ==\n// Query planning takes 26 ms\n// == Iteration 2 ==\n// Query planning takes 53 ms\n// == Iteration 3 ==\n// Query planning takes 163 ms\n// == Iteration 4 ==\n// Query planning takes 700 ms\n// == Iteration 5 ==\n// Query planning takes 3418 ms\n```\n\nThis is because when building a new Dataset, the new plan is always built upon `QueryExecution.analyzed`, which doesn't leverage existing cached plans.\n\nOn the other hand, usually, doing caching every a few iterations may not be the right direction for this problem since caching is too memory consuming (imaging computing connected components over a graph with 50 billion nodes). What we really need here is to truncate both the query plan (to minimize query planning time) and the lineage of the underlying RDD (to avoid stack overflow).\n### Changes introduced in this PR\n\nThis PR tries to fix this issue by introducing a `checkpoint()` method into `Dataset[T]`, which does exactly the things described above. The following snippet, which is essentially the same as the one above but invokes `checkpoint()` instead of `cache()`, shows the micro benchmark result of this PR:\n\nOne key point is that the checkpointed Dataset should preserve the origianl partitioning and ordering information of the original Dataset, so that we can avoid unnecessary shuffling (similar to reading from a pre-bucketed table). This is done by adding `outputPartitioning` and `outputOrdering` to `LogicalRDD` and `RDDScanExec`.\n### Micro benchmark\n\n``` scala\nspark.sparkContext.setCheckpointDir(\"/tmp/cp\")\n\n(0 until 100).foldLeft(Seq(1, 2, 3).toDS) { (plan, iteration) =>\n  println(s\"== Iteration $iteration ==\")\n  val time0 = System.currentTimeMillis()\n  val cp = plan.checkpoint()\n  cp.count()\n  System.out.println(s\"Checkpointing takes ${System.currentTimeMillis() - time0} ms\")\n\n  val time1 = System.currentTimeMillis()\n  val joined = cp.join(cp, \"value\").join(cp, \"value\").join(cp, \"value\").join(cp, \"value\")\n  val result = joined.as[Int]\n\n  println(s\"Query planning takes ${System.currentTimeMillis() - time1} ms\")\n  result\n}\n\n// == Iteration 0 ==\n// Checkpointing takes 591 ms\n// Query planning takes 13 ms\n// == Iteration 1 ==\n// Checkpointing takes 1605 ms\n// Query planning takes 16 ms\n// == Iteration 2 ==\n// Checkpointing takes 782 ms\n// Query planning takes 8 ms\n// == Iteration 3 ==\n// Checkpointing takes 729 ms\n// Query planning takes 10 ms\n// == Iteration 4 ==\n// Checkpointing takes 734 ms\n// Query planning takes 9 ms\n// == Iteration 5 ==\n// ...\n// == Iteration 50 ==\n// Checkpointing takes 571 ms\n// Query planning takes 7 ms\n// == Iteration 51 ==\n// Checkpointing takes 548 ms\n// Query planning takes 7 ms\n// == Iteration 52 ==\n// Checkpointing takes 596 ms\n// Query planning takes 8 ms\n// == Iteration 53 ==\n// Checkpointing takes 568 ms\n// Query planning takes 7 ms\n// ...\n```\n\nYou may see that although checkpointing is more heavy weight an operation, it always takes roughly the same amount of time to perform both checkpointing and query planning.\n### Open question\n\nmengxr mentioned that it would be more convenient if we can make `Dataset.checkpoint()` eager, i.e., always performs a `RDD.count()` after calling `RDD.checkpoint()`. Not quite sure whether this is a universal requirement. Maybe we can add a `eager: Boolean` argument for `Dataset.checkpoint()` to support that.\n## How was this patch tested?\n\nUnit test added in `DatasetSuite`.\n\nAuthor: Cheng Lian <lian@databricks.com>\nAuthor: Yin Huai <yhuai@databricks.com>\n\nCloses #15651 from liancheng/ds-checkpoint.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/8bfc3b7aac577e36aadc4fe6dee0665d0b2ae919"},{"sha":"de3f87fa712c305fdd463fc36acffc5418c95c4d","author":{"name":"Shixiong Zhu","email":"eb2f6da57ec54996cebae8c2a82b9fbfd527e14c@databricks.com"},"message":"[SPARK-18030][TESTS] Fix flaky FileStreamSourceSuite by not deleting the files\n\n## What changes were proposed in this pull request?\n\nThe test `when schema inference is turned on, should read partition data` should not delete files because the source maybe is listing files. This PR just removes the delete actions since they are not necessary.\n\n## How was this patch tested?\n\nJenkins\n\nAuthor: Shixiong Zhu <shixiong@databricks.com>\n\nCloses #15699 from zsxwing/SPARK-18030.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/de3f87fa712c305fdd463fc36acffc5418c95c4d"},{"sha":"6633b97b579c7f003d60b6bfa2e2a248340d3dc6","author":{"name":"Eric Liang","email":"8825d93f7d4ea34a2c506e18a7ac7514d6509e7d@databricks.com"},"message":"[SPARK-18167][SQL] Also log all partitions when the SQLQuerySuite test flakes\n\n## What changes were proposed in this pull request?\n\nOne possibility for this test flaking is that we have corrupted the partition schema somehow in the tests, which causes the cast to decimal to fail in the call. This should at least show us the actual partition values.\n\n## How was this patch tested?\n\nRun it locally, it prints out something like `ArrayBuffer(test(partcol=0), test(partcol=1), test(partcol=2), test(partcol=3), test(partcol=4))`.\n\nAuthor: Eric Liang <ekl@databricks.com>\n\nCloses #15701 from ericl/print-more-info.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/6633b97b579c7f003d60b6bfa2e2a248340d3dc6"},{"sha":"efc254a82bc3331d78023f00d29d4c4318dfb734","author":{"name":"Eric Liang","email":"8825d93f7d4ea34a2c506e18a7ac7514d6509e7d@databricks.com"},"message":"[SPARK-18087][SQL] Optimize insert to not require REPAIR TABLE\n\n## What changes were proposed in this pull request?\n\nWhen inserting into datasource tables with partitions managed by the hive metastore, we need to notify the metastore of newly added partitions. Previously this was implemented via `msck repair table`, but this is more expensive than needed.\n\nThis optimizes the insertion path to add only the updated partitions.\n## How was this patch tested?\n\nExisting tests (I verified manually that tests fail if the repair operation is omitted).\n\nAuthor: Eric Liang <ekl@databricks.com>\n\nCloses #15633 from ericl/spark-18087.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/efc254a82bc3331d78023f00d29d4c4318dfb734"},{"sha":"7d6c87155c740cf622c2c600a8ca64154d24c422","author":{"name":"Eric Liang","email":"8825d93f7d4ea34a2c506e18a7ac7514d6509e7d@databricks.com"},"message":"[SPARK-18167][SQL] Retry when the SQLQuerySuite test flakes\n\n## What changes were proposed in this pull request?\n\nThis will re-run the flaky test a few times after it fails. This will help determine if it's due to nondeterministic test setup, or because of some environment issue (e.g. leaked config from another test).\n\ncc yhuai\n\nAuthor: Eric Liang <ekl@databricks.com>\n\nCloses #15708 from ericl/spark-18167-3.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/7d6c87155c740cf622c2c600a8ca64154d24c422"},{"sha":"d9d1465009fb40550467089ede315496552374c5","author":{"name":"Reynold Xin","email":"9a371236ace08d82aa86864cade97762c12d4503@databricks.com"},"message":"[SPARK-18024][SQL] Introduce an internal commit protocol API\n\n## What changes were proposed in this pull request?\nThis patch introduces an internal commit protocol API that is used by the batch data source to do write commits. It currently has only one implementation that uses Hadoop MapReduce's OutputCommitter API. In the future, this commit API can be used to unify streaming and batch commits.\n\n## How was this patch tested?\nShould be covered by existing write tests.\n\nAuthor: Reynold Xin <rxin@databricks.com>\nAuthor: Eric Liang <ekl@databricks.com>\n\nCloses #15707 from rxin/SPARK-18024-2.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/d9d1465009fb40550467089ede315496552374c5"},{"sha":"dd85eb5448c8f2672260b57e94c0da0eaac12616","author":{"name":"Liang-Chi Hsieh","email":"9f98897f009ec1944a62ee7d389f9f5b1873efea@gmail.com"},"message":"[SPARK-18107][SQL] Insert overwrite statement runs much slower in spark-sql than it does in hive-client\n\n## What changes were proposed in this pull request?\n\nAs reported on the jira, insert overwrite statement runs much slower in Spark, compared with hive-client.\n\nIt seems there is a patch [HIVE-11940](https://github.com/apache/hive/commit/ba21806b77287e237e1aa68fa169d2a81e07346d) which largely improves insert overwrite performance on Hive. HIVE-11940 is patched after Hive 2.0.0.\n\nBecause Spark SQL uses older Hive library, we can not benefit from such improvement.\n\nThe reporter verified that there is also a big performance gap between Hive 1.2.1 (520.037 secs) and Hive 2.0.1 (35.975 secs) on insert overwrite execution.\n\nInstead of upgrading to Hive 2.0 in Spark SQL, which might not be a trivial task, this patch provides an approach to delete the partition before asking Hive to load data files into the partition.\n\nNote: The case reported on the jira is insert overwrite to partition. Since `Hive.loadTable` also uses the function to replace files, insert overwrite to table should has the same issue. We can take the same approach to delete the table first. I will upgrade this to include this.\n## How was this patch tested?\n\nJenkins tests.\n\nThere are existing tests using insert overwrite statement. Those tests should be passed. I added a new test to specially test insert overwrite into partition.\n\nFor performance issue, as I don't have Hive 2.0 environment, this needs the reporter to verify it. Please refer to the jira.\n\nPlease review https://cwiki.apache.org/confluence/display/SPARK/Contributing+to+Spark before opening a pull request.\n\nAuthor: Liang-Chi Hsieh <viirya@gmail.com>\n\nCloses #15667 from viirya/improve-hive-insertoverwrite.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/dd85eb5448c8f2672260b57e94c0da0eaac12616"},{"sha":"623fc7fc67735cfafdb7f527bd3df210987943c6","author":{"name":"Dongjoon Hyun","email":"1bf3a3c57610939bd1558dffb564906c959abecb@apache.org"},"message":"[MINOR][DOC] Remove spaces following slashs\n\n## What changes were proposed in this pull request?\n\nThis PR merges multiple lines enumerating items in order to remove the redundant spaces following slashes in [Structured Streaming Programming Guide in 2.0.2-rc1](http://people.apache.org/~pwendell/spark-releases/spark-2.0.2-rc1-docs/structured-streaming-programming-guide.html).\n- Before: `Scala/ Java/ Python`\n- After: `Scala/Java/Python`\n## How was this patch tested?\n\nManual by the followings because this is documentation update.\n\n```\ncd docs\nSKIP_API=1 jekyll build\n```\n\nAuthor: Dongjoon Hyun <dongjoon@apache.org>\n\nCloses #15686 from dongjoon-hyun/minor_doc_space.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/623fc7fc67735cfafdb7f527bd3df210987943c6"},{"sha":"cb80edc26349e2e358d27fe2ae8e5d6959b77fab","author":{"name":"wangzhenhua","email":"93943f521ced4ea3f21d64a737435e7a7e171ac6@huawei.com"},"message":"[SPARK-18111][SQL] Wrong ApproximatePercentile answer when multiple records have the minimum value\n\n## What changes were proposed in this pull request?\n\nWhen multiple records have the minimum value, the answer of ApproximatePercentile is wrong.\n## How was this patch tested?\n\nadd a test case\n\nAuthor: wangzhenhua <wangzhenhua@huawei.com>\n\nCloses #15641 from wzhfy/percentile.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/cb80edc26349e2e358d27fe2ae8e5d6959b77fab"},{"sha":"e34b4e12673fb76c92f661d7c03527410857a0f8","author":{"name":"Charles Allen","email":"74964f4380c66ef5e4e7b490d8cdccec939315ab@allen-net.com"},"message":"[SPARK-15994][MESOS] Allow enabling Mesos fetch cache in coarse executor backend\n\nMesos 0.23.0 introduces a Fetch Cache feature http://mesos.apache.org/documentation/latest/fetcher/ which allows caching of resources specified in command URIs.\n\nThis patch:\n- Updates the Mesos shaded protobuf dependency to 0.23.0\n- Allows setting `spark.mesos.fetcherCache.enable` to enable the fetch cache for all specified URIs. (URIs must be specified for the setting to have any affect)\n- Updates documentation for Mesos configuration with the new setting.\n\nThis patch does NOT:\n- Allow for per-URI caching configuration. The cache setting is global to ALL URIs for the command.\n\nAuthor: Charles Allen <charles@allen-net.com>\n\nCloses #13713 from drcrallen/SPARK15994.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/e34b4e12673fb76c92f661d7c03527410857a0f8"},{"sha":"ec6f479bb1d14c9eb45e0418353007be0416e4c5","author":{"name":"Sandeep Singh","email":"69043e619d79bcf4ae068e5b131d66c33e73727d@techaddict.me"},"message":"[SPARK-16881][MESOS] Migrate Mesos configs to use ConfigEntry\n\n## What changes were proposed in this pull request?\n\nMigrate Mesos configs to use ConfigEntry\n## How was this patch tested?\n\nJenkins Tests\n\nAuthor: Sandeep Singh <sandeep@techaddict.me>\n\nCloses #15654 from techaddict/SPARK-16881.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/ec6f479bb1d14c9eb45e0418353007be0416e4c5"},{"sha":"9b377aa49f14af31f54164378d60e0fdea2142e5","author":{"name":"Wang Lei","email":"2ae6f49ce33307a941f16d81e58cb429f0aaf78d@kongming-inc.com"},"message":"[SPARK-18114][MESOS] Fix mesos cluster scheduler generage command option error\n\n## What changes were proposed in this pull request?\n\nEnclose --conf option value with \"\" to support multi value configs like spark.driver.extraJavaOptions, without \"\", driver will fail to start.\n## How was this patch tested?\n\nJenkins Tests.\n\nTest in our production environment, also unit tests, It is a very small change.\n\nAuthor: Wang Lei <lei.wang@kongming-inc.com>\n\nCloses #15643 from LeightonWong/messos-cluster.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/9b377aa49f14af31f54164378d60e0fdea2142e5"},{"sha":"f7c145d8ce14b23019099c509d5a2b6dfb1fe62c","author":{"name":"Herman van Hovell","email":"38f32192f78c1df35671ebb666a8ae224cdccefb@databricks.com"},"message":"[SPARK-17996][SQL] Fix unqualified catalog.getFunction(...)\n\n## What changes were proposed in this pull request?\n\nCurrently an unqualified `getFunction(..)`call returns a wrong result; the returned function is shown as temporary function without a database. For example:\n\n```\nscala> sql(\"create function fn1 as 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFAbs'\")\nres0: org.apache.spark.sql.DataFrame = []\n\nscala> spark.catalog.getFunction(\"fn1\")\nres1: org.apache.spark.sql.catalog.Function = Function[name='fn1', className='org.apache.hadoop.hive.ql.udf.generic.GenericUDFAbs', isTemporary='true']\n```\n\nThis PR fixes this by adding database information to ExpressionInfo (which is used to store the function information).\n## How was this patch tested?\n\nAdded more thorough tests to `CatalogSuite`.\n\nAuthor: Herman van Hovell <hvanhovell@databricks.com>\n\nCloses #15542 from hvanhovell/SPARK-17996.","distinct":false,"url":"https://api.github.com/repos/cloud-fan/spark/commits/f7c145d8ce14b23019099c509d5a2b6dfb1fe62c"}]}
{"actor":{"display_login":"cloud-fan"}}